注册 登录
编程论坛 C++教室

文件读写问题 本来是想节约点空间的。。。。

edenpan 发布于 2012-06-15 00:16, 535 次点击
代码是这样滴:
#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 来存数字 并且写入文件  并且能够没有问题的读出 要用什么方式。。。。。
我好像能想的都想了 捞头  想问下有方法不  肯定有的 是不  
谢谢了
6 回复
#2
edenpan2012-06-15 00:18
额  补充问下。。。
怎么用编辑软件看直接数字 也就是说 不是那个‘1’ ‘2’‘3’  而是 可以直接看到1 2 3 码就是那么多的
是这么表达吧 。。。
谢谢  
#3
zxwangyun2012-06-15 00:44
提醒你一下,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进行切换
#4
pangding2012-06-15 10:02
读出来的是 0 0 0,原因正如 3楼 所说。是因为你写完之后,文件指针就更新到了新的位置。它本来的用意是方便你再次写入。
如果你想返回去读你之前写的东西,得 fseek 重定位文件指针。具体方法百度一下就有了。
#5
zklhp2012-06-15 10:11
对硬盘不了解了罢 节约硬盘没用 因为硬盘的最小分配单元是簇 一个簇怎么地也得几k 也就是几千个字节 你省这几个字节有啥用
#6
edenpan2012-06-15 11:32
本来想把问题简化下结果 基础不牢啊 谢谢了 楼上 的诸位 恩
 
#7
lonmaor2012-06-15 11:34
如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;
}

1