这个问题在这里已有答案:
我是C的新手。我偶然发现了feof
的某些行为,我无法解释。具体在下面的代码中我创建一个文件,在其中写入一个字节的信息,然后关闭并再次打开它,读取信息(我的1个字节)直到达到EOF
,然后通过0
字节移动文件指针的当前位置(即根本不改变现在的位置)突然间我不再在EOF
了。怎么会?
#include <stdio.h>
#include <stdint.h>
typedef uint8_t BYTE;
int main(void) {
FILE* f = fopen("myfile.txt","w");
BYTE b = 0x0000;
fwrite(&b,1,1,f);
fclose(f);
f = fopen("myfile.txt","r");
while (!feof(f)){
fread(&b,1,1,f);
}
printf("We have reached EOF: %i \n",feof(f));
fseek(f,0,SEEK_CUR);
printf("We have reached EOF: %i \n",feof(f));
}
产量
We have reached EOF: 1
We have reached EOF: 0
来自fseek
文档:
成功调用此函数后,将清除流的文件结束内部指示符,并删除此流上以前调用ungetc的所有效果。