使用fread()从二进制文件读取会显示其他字符

时间:2015-01-16 19:39:54

标签: c file binary fwrite fread

我的问题是这个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);
}

为什么?

1 个答案:

答案 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}}。