成功调用fseek()函数会清除流的文件结束指示符

时间:2014-03-28 07:35:59

标签: c file pointers stdio fseek

标准c库函数fseek的手册说:"成功调用fseek()函数会清除流的文件结束指示符。"

对我而言,这听起来好像是EOF is at 2并且我调用fseek()将指针指向4,这应该有效,而eof现在将指向5.但是当我测试时这个假设,指针不会超过当前EOF(在上面的情况下为2),因此我对该线的理解是错误的。这条线意味着什么呢?谢谢!

1 个答案:

答案 0 :(得分:4)

您必须记住,在您实际尝试从文件末尾读取之前,不会设置EOF标记。

使用fseek清除标志,即使您寻求超出文件末尾,也会执行此操作。它的工作原理是因为下次阅读时会再次设置标志。

这就是为什么有while (!feof(...))这样的循环是个坏主意,因为这些循环会循环一次到多次而不会检测到文件条件的实际结束。