标题:文件读写问题 本来是想节约点空间的。。。。
只看楼主
edenpan
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-29
结帖率:100%
已结贴  问题点数:20 回复次数:6 
文件读写问题 本来是想节约点空间的。。。。
代码是这样滴:
#include <stdio.h>
#include <cstdlib>
int main()
{
       FILE *fp;
       char buffer[]={1,2,3};
       fp=fopen("rest.r","a+");
       fwrite(buffer,1,sizeof(buffer),fp);
       fread(buffer,1,sizeof(buffer),fp);
       for(int i=0;i<3;i++)
       printf("%d\n",buffer[i]);
       fclose(fp);
       system("pause");
       return 0;
}
唔  本来说 在读出来 也要是
1 2 3
但是读的结果是0 0 0
我估摸着是用了 char 的原因,,,,
但是我不想用int啊  内存空间2倍~~~~
唔  所以 要是我想用uchar 来存数字 并且写入文件  并且能够没有问题的读出 要用什么方式。。。。。
我好像能想的都想了 捞头  想问下有方法不  肯定有的 是不  
谢谢了
搜索更多相关主题的帖子: system include return 
2012-06-15 00:16
edenpan
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-29
得分:0 
额  补充问下。。。
怎么用编辑软件看直接数字 也就是说 不是那个‘1’ ‘2’‘3’  而是 可以直接看到1 2 3 码就是那么多的
是这么表达吧 。。。
谢谢  
2012-06-15 00:18
zxwangyun
Rank: 4
来 自:云南
等 级:业余侠客
威 望:1
帖 子:232
专家分:299
注 册:2008-10-17
得分:20 
提醒你一下,fwrite是带缓冲区的,不是马上写了就刷新到硬盘上去了,
还有这3句:
       fp=fopen("rest.r","a+");
       fwrite(buffer,1,sizeof(buffer),fp);
       fread(buffer,1,sizeof(buffer),fp);
第二条语句fp应该已经是在文件尾了吧?
第3条语句,fp处于文件尾的话肯定是读不到数据的,你可以用fread的返回值看看,
直接看16进制的数据推荐使用UltralEdit,Ctrl+H进行切换

努力改变一点点!!
2012-06-15 00:44
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
读出来的是 0 0 0,原因正如 3楼 所说。是因为你写完之后,文件指针就更新到了新的位置。它本来的用意是方便你再次写入。
如果你想返回去读你之前写的东西,得 fseek 重定位文件指针。具体方法百度一下就有了。
2012-06-15 10:02
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
对硬盘不了解了罢 节约硬盘没用 因为硬盘的最小分配单元是簇 一个簇怎么地也得几k 也就是几千个字节 你省这几个字节有啥用
2012-06-15 10:11
edenpan
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-8-29
得分:0 
本来想把问题简化下结果 基础不牢啊 谢谢了 楼上 的诸位 恩
 
2012-06-15 11:32
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
得分:0 
如4楼所说,重置一下fp就可以了
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
       FILE *fp;
       char buffer[]={1,2,3};
       fp=fopen("rest.r","a+");
       fwrite(buffer,1,sizeof(buffer),fp);
       fseek(fp,0,SEEK_SET);
       fread(buffer,1,sizeof(buffer),fp);
       int i;
       for(i=0;i<3;i++)
       printf("%d\n",buffer[i]);
       fclose(fp);
       system("pause");
       return 0;
}


从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-06-15 11:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-371567-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021202 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved