在没有手动跟踪当前光标位置和文件大小的情况下,检查我是否已到达FILE*
流的末尾的最佳方法是什么?该实现应该在fopen
的读取和读/写模式下工作。
我想出了这个:
int iseof(FILE *fp)
{
int ch = fgetc(fp);
if(ch == EOF) return 1;
ungetc(ch, fp);
return 0;
}
这可以解决问题,但当然它有读取字符的开销,并可能将其推回到流中。这就是为什么我想知道是否有更好的解决方案。只需使用feof()
即可使用,因为只有在文件末尾或之后读取时才会返回true
。
有什么想法吗?
答案 0 :(得分:0)
最好在while循环中手动执行此检查,而不是尝试编写一个函数来包装它:
ch = fgetc(fp);
while (ch != EOF) {]
// do something with ch
ch = fgetc(fp);
}