C 成功调用fseek()函数将清除流的文件结束指示符
标准c库函数fseek的手册中说:“成功调用C 成功调用fseek()函数将清除流的文件结束指示符,c,file,pointers,stdio,fseek,C,File,Pointers,Stdio,Fseek,标准c库函数fseek的手册中说:“成功调用fseek()函数将清除流的文件结束指示器。” 对我来说,这听起来像是在说如果EOF在2并且我调用fseek()将指针指向4,那么应该可以工作,EOF现在将指向5。但是当我检验这个假设时,指针并没有超出当前的EOF(在上面的例子中是2),因此我对这条线的理解是错误的。这句话是什么意思?谢谢 您必须记住,EOF标志只有在您实际尝试从文件末尾以外的位置读取时才会设置 当fseek清除该标志时,即使您试图超出文件末尾,它也会执行此操作。它之所以有效,是因为下
fseek()
函数将清除流的文件结束指示器。”
对我来说,这听起来像是在说如果
EOF在2
并且我调用fseek()
将指针指向4,那么应该可以工作,EOF
现在将指向5。但是当我检验这个假设时,指针并没有超出当前的EOF
(在上面的例子中是2),因此我对这条线的理解是错误的。这句话是什么意思?谢谢 您必须记住,EOF
标志只有在您实际尝试从文件末尾以外的位置读取时才会设置
当fseek
清除该标志时,即使您试图超出文件末尾,它也会执行此操作。它之所以有效,是因为下次阅读时会再次设置该标志
这就是为什么像
while(!feof(…)
这样的循环是一个坏主意,因为这些循环会一次循环到多个循环,而不会检测到文件的实际结束状态。您必须记住,EOF
标志是在您实际尝试从文件结束之外读取时才设置的
当fseek
清除该标志时,即使您试图超出文件末尾,它也会执行此操作。它之所以有效,是因为下次阅读时会再次设置该标志
这就是为什么像(!feof(…)这样的循环是一个坏主意,因为它们会一次循环到多个循环,而不会检测到文件的实际结束状态。这意味着,如果您以前点击过EOF,然后在文件中找到一个有效位置,那么EOF标志将不再设置。这是正确的。谢谢这意味着,如果您以前点击过EOF,然后在文件中找到一个有效位置,那么EOF标志将不再设置。这是正确的。谢谢谢谢我应该记得EOF是一个标志,而不是文件中的一个位置。现在有道理了,谢谢!我应该记得EOF是一个标志,而不是文件中的一个位置。现在它有意义了。