使用 fread() 从二进制文件读取显示附加字符
Reading from a binary file using fread() displays additional characters
我的问题是关于这个 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);
}
为什么?
改变这个
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
再次打印出来。
我的问题是关于这个 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);
}
为什么?
改变这个
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
再次打印出来。