提问人:zesy 提问时间:12/26/2017 更新时间:12/26/2017 访问量:125
C:feof 的奇怪行为 [duplicate]
C: strange behavior of feof [duplicate]
问:
我是 C 的新手。我偶然发现了某些我无法解释的行为。具体来说,在下面的代码中,我创建了一个文件,在其中写入一个字节的信息,然后关闭并再次打开它,读取信息(我的 1 个字节)直到到达,然后逐个字节移动文件指针的当前位置(即根本不更改当前位置),突然我不再在了。怎么会这样?feof
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
答:
3赞
Nick
12/26/2017
#1
从 fseek
文档:
成功调用此函数后,将清除流的文件末尾内部指示符,并且之前调用此流的 ungetc 的所有影响都将被删除。
评论
0赞
zesy
12/27/2017
难道你不知道fseek这种不直观行为的动机是什么吗?
0赞
Nick
12/27/2017
不,但这听起来是一个很好的 SO 问题。
上一个:检查输入流在 C 中是否为空
评论
while(!feof())