使用 fread() 从二进制文件读取显示附加字符

Reading from a binary file using fread() displays additional characters

我的问题是关于这个 fread() 函数,这个函数暂时看起来很混乱。我创建了一个二进制文件并将值 123 放入其中。然后我尝试读取文件,当我使用 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);
}

为什么?

改变这个

while(!feof(f))

while(fread(&j,sizeof(int),1,f) == 1)

来自 linux feof() 手册

The function feof() tests the end-of-file indicator for the stream pointed to by stream, returning nonzero if it is set. The end-of-file indicator can only be cleared by the function clearerr().

在您尝试在文件末尾调用 fread() 后,feof() 将 return 为真,即在您读取最后一个数字后,您将需要调用 fread() 再次设置 文件结束 指示符。

因此循环将在最后一次读取后再执行一次,并且由于它没有读取任何内容而是 return 一个错误,因此它也不会更改 j 的值, 所以之前的值 3 再次打印出来。