标准c库函数fseek的手册说:"对fseek()
函数的成功调用清除了流的文件结束指示器。"
对我来说,这听起来像是说如果EOF is at 2
和我调用fseek()
来获得指针在4,那应该工作,eof
现在将指向5。但是当我测试这个假设时,指针并没有超越当前的EOF
(在上述情况下为2),因此我对这条线的理解是错误的。这条线是什么意思呢?谢谢!
您必须记住,直到您实际尝试从文件末尾读取时才设置EOF
标志。
使用fseek
清除标志,即使您试图超越文件的末尾,它也会这样做。它之所以有效是因为下次读取时将再次设置该标志
这就是为什么使用像while (!feof(...))
这样的循环是一个坏主意,因为它们会循环一次,而不会检测到文件条件的实际结束。