标准c库函数fseek的手册说:"成功调用fseek()
函数会清除流的文件结束指示符。"
对我而言,这听起来好像是EOF is at 2
并且我调用fseek()
将指针指向4,这应该有效,而eof
现在将指向5.但是当我测试时这个假设,指针不会超过当前EOF
(在上面的情况下为2),因此我对该线的理解是错误的。这条线意味着什么呢?谢谢!
答案 0 :(得分:4)
您必须记住,在您实际尝试从文件末尾读取之前,不会设置EOF
标记。
使用fseek
清除标志,即使您寻求超出文件末尾,也会执行此操作。它的工作原理是因为下次阅读时会再次设置标志。
这就是为什么有while (!feof(...))
这样的循环是个坏主意,因为这些循环会循环一次到多次而不会检测到文件条件的实际结束。