#include <stdio.h>
int main()
{
FILE * fp = fopen("Introduce.txt","rt");
fseek(fp,0,SEEK_END);
int i = feof(fp);
printf("%d",i);
fseek(fp,1,SEEK_END);
i = feof(fp);
printf("%d",i);
fseek(fp,-1,SEEK_END);
i = feof(fp);
printf("%d",i);
return 0;
}
我试图访问EOF定位文件位置指示器&#39;在文件的末尾。
但是这段代码的结果是&#34; 000&#34;。
为什么会这样?
答案 0 :(得分:3)
在您尝试读取某些数据并且没有要读取的数据之前,feof()
函数不会报告它处于EOF状态。
您可以在文件的当前EOF之外寻找可以写作的文件(或者可以阅读和写作的文件)。
有关您很少需要使用feof()
的原因的详细信息,请参阅while (!feof(file))
is always wrong。在某些方面,feof()
是您应该忘记的功能 - 如果您认为它不存在,您的大多数程序都会得到改善。
答案 1 :(得分:2)
This documentation on feof
非常明确(强调我的):
此功能仅报告最多报告的流状态 最近的I / O操作,它不检查相关的数据源。 例如,如果最近的I / O是
fgetc
,则返回 文件的最后一个字节,feof
返回零。 下一个fgetc
失败了 将流状态更改为文件结尾。只有这样feof
才会返回 非零的。强>在典型用法中,输入流处理会因任何错误而停止;
feof
和 然后使用ferror
来区分不同的错误 条件。