我的问题是这个fread()
函数暂时似乎令人困惑。我创建了一个二进制文件,并在其中加入了值 1 , 2 和 3 。然后我尝试阅读该文件,当我使用fread()
时,它显示为 1233 而不是 123 。
#include <stdio.h>
#include <stdlib.h>
main ()
{
int x=1,y=2,z=3,i,j;
FILE *f;
f=fopen("Werid.bin","wb");
fwrite(&x,sizeof(int),1,f);
fwrite(&y,sizeof(int),1,f);
fwrite(&z,sizeof(int),1,f);
fclose(f);
f=fopen("Werid.bin","rb");
if (!f) perror("X");
while(!feof(f))
{
fread(&j,sizeof(int),1,f);
printf("%d",j);
}
fclose(f);
}
为什么?
答案 0 :(得分:2)
更改此
while(!feof(f))
到
while(fread(&j,sizeof(int),1,f) == 1)
来自linux feof()
手册
函数feof()测试stream指向的流的文件结束指示符,如果设置则返回非零。文件结束指示符只能是 由函数clearerr()清除。
尝试在文件末尾调用feof()
后,fread()
将返回true,即在您读取最后一个数字后,您需要再次调用fread()
来设置< strong>文件结尾指标。
因此循环将在最后一次读取后再执行一次,并且由于它不会读取任何内容而是返回错误,因此它也不会更改j
的值,因此之前的值为{{再次打印1}}。