user-0 提问: 关于使用fseek函数之后feof函数无法结束文件的警告

回复:
user: user-1
content: feof Tests for end-of-file on a stream.  int feof( FILE *stream );  Function Required Header Compatibility  feof <stdio.h> ANSI, Win 95, Win NT    For additional compatibility information, see Compatibility in the Introduction.  Libraries  LIBC.LIB Single thread static library, retail version  LIBCMT.LIB Multithread static library, retail version  MSVCRT.LIB Import library for MSVCRT.DLL, retail version    Return Value  The feof function returns a nonzero value after the first read operation that attempts to read past the end of the file. It returns 0 if the current position is not end of file. There is no error return.  Parameter  stream  Pointer to FILE structure  Remarks  The feof routine (implemented both as a function and as a macro) determines whether the end of stream has been reached. When end of file is reached, read operations return an end-of-file indicator until the stream is closed or until rewind, fsetpos, fseek, or clearerr is called against it.  Example  /* FEOF.C: This program uses feof to indicate when  * it reaches the end of the file FEOF.C. It also  * checks for errors with ferror.  */  #include <stdio.h> #include <stdlib.h>  void main( void ) {    int  count, total = 0;    char buffer[100];    FILE *stream;     if( (stream = fopen( "feof.c", "r" )) == NULL )       exit( 1 );     /* Cycle until end of file reached: */    while( !feof( stream ) )    {       /* Attempt to read in 10 bytes: */       count = fread( buffer, sizeof( char ), 100, stream );       if( ferror( stream ) )      {          perror( "Read error" );          break;       }        /* Total up actual bytes read */       total += count;    }    printf( "Number of bytes read = %d\n", total );    fclose( stream ); }   Output  Number of bytes read = 745   Error Handling Routines |  Stream I/O Routines  See Also   clearerr, _eof, ferror, perror

user: user-0
content: 引用 11 楼 mujiok2003 的回复:[quote=引用 10 楼 u014711608 的回复:] [quote=引用 8 楼 mujiok2003 的回复:] [quote=引用 7 楼 u014711608 的回复:] [quote=引用 5 楼 mujiok2003 的回复:] [quote=引用 4 楼 u014711608 的回复:] [quote=引用 3 楼 mujiok2003 的回复:] 引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。怎么说[/quote]  feof应该紧跟在输入、输出操作之后,用于判断前一个IO是否成功，是否需要有更多IO可以执行。 [/quote]feof只能紧跟IO之后，那么紧跟fseek用什么判断文件是否到达末尾呢[/quote] 不能，因为：6L[/quote]那句英语的意思是否是：当fseek成功调用后，自动清除文件的末尾。影响先前的文件流？？（抱歉  我的英语不太好）[/quote] 成功执行fseek之后， 文件末尾标识会被清空。 也就是fseek成功之后， false ==  feof(...)[/quote]也就是我理解的意思咯。哦。。。我知道了  feof是和IO相关的，feof函数判断的依据是IO语句给的对吧。。如果他们中间用了fseek函数  就会把这种判断依据给消除了。理所当然，如果feof紧跟fopen，就算打开了一个空文件，feof也会无法判断文件是否结束。

user: user-2
content: 引用 10 楼 u014711608 的回复:[quote=引用 8 楼 mujiok2003 的回复:] [quote=引用 7 楼 u014711608 的回复:] [quote=引用 5 楼 mujiok2003 的回复:] [quote=引用 4 楼 u014711608 的回复:] [quote=引用 3 楼 mujiok2003 的回复:] 引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。怎么说[/quote]  feof应该紧跟在输入、输出操作之后,用于判断前一个IO是否成功，是否需要有更多IO可以执行。 [/quote]feof只能紧跟IO之后，那么紧跟fseek用什么判断文件是否到达末尾呢[/quote] 不能，因为：6L[/quote]那句英语的意思是否是：当fseek成功调用后，自动清除文件的末尾。影响先前的文件流？？（抱歉  我的英语不太好）[/quote] 成功执行fseek之后， 文件末尾标识会被清空。 也就是fseek成功之后， false ==  feof(...)

user: user-0
content: 引用 8 楼 mujiok2003 的回复:[quote=引用 7 楼 u014711608 的回复:] [quote=引用 5 楼 mujiok2003 的回复:] [quote=引用 4 楼 u014711608 的回复:] [quote=引用 3 楼 mujiok2003 的回复:] 引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。怎么说[/quote]  feof应该紧跟在输入、输出操作之后,用于判断前一个IO是否成功，是否需要有更多IO可以执行。 [/quote]feof只能紧跟IO之后，那么紧跟fseek用什么判断文件是否到达末尾呢[/quote] 不能，因为：6L[/quote]那句英语的意思是否是：当fseek成功调用后，自动清除文件的末尾。影响先前的文件流？？（抱歉  我的英语不太好）

user: user-2
content: 引用 7 楼 u014711608 的回复:[quote=引用 5 楼 mujiok2003 的回复:] [quote=引用 4 楼 u014711608 的回复:] [quote=引用 3 楼 mujiok2003 的回复:] 引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。怎么说[/quote]  feof应该紧跟在输入、输出操作之后,用于判断前一个IO是否成功，是否需要有更多IO可以执行。 [/quote]feof只能紧跟IO之后，那么紧跟fseek用什么判断文件是否到达末尾呢[/quote] 或者你可以尝试进行一次真正的IO

user: user-2
content: 引用 7 楼 u014711608 的回复:[quote=引用 5 楼 mujiok2003 的回复:] [quote=引用 4 楼 u014711608 的回复:] [quote=引用 3 楼 mujiok2003 的回复:] 引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。怎么说[/quote]  feof应该紧跟在输入、输出操作之后,用于判断前一个IO是否成功，是否需要有更多IO可以执行。 [/quote]feof只能紧跟IO之后，那么紧跟fseek用什么判断文件是否到达末尾呢[/quote] 不能，因为：6L

user: user-0
content: 引用 5 楼 mujiok2003 的回复:[quote=引用 4 楼 u014711608 的回复:] [quote=引用 3 楼 mujiok2003 的回复:] 引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。怎么说[/quote]  feof应该紧跟在输入、输出操作之后,用于判断前一个IO是否成功，是否需要有更多IO可以执行。 [/quote]feof只能紧跟IO之后，那么紧跟fseek用什么判断文件是否到达末尾呢

user: user-2
content: The end-of-file internal indicator of the stream is cleared after a successful call to this function, and all effects from previous calls to ungetc on this stream are dropped.

user: user-2
content: 引用 4 楼 u014711608 的回复:[quote=引用 3 楼 mujiok2003 的回复:] 引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。怎么说[/quote]  feof应该紧跟在输入、输出操作之后,用于判断前一个IO是否成功，是否需要有更多IO可以执行。

user: user-0
content: 引用 3 楼 mujiok2003 的回复:引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。怎么说

user: user-2
content: 引用关键字：feof函数无法判断文件结束，C语言/C++无法判断文件结束，文件无法判断结束  你没有用对而已。

user: user-0
content: 引用 1 楼 truelance 的回复:http://www.opengroup.org/onlinepubs/000095399/functions/fseek.html The fseek() function shall allow the file-position indicator to be set beyond the end of existing data in the file. If data is later written at this point, subsequent reads of data in the gap shall return bytes with the value 0 until data is actually written into the gap.Thank you！！

user: user-3
content: http://www.opengroup.org/onlinepubs/000095399/functions/fseek.html The fseek() function shall allow the file-position indicator to be set beyond the end of existing data in the file. If data is later written at this point, subsequent reads of data in the gap shall return bytes with the value 0 until data is actually written into the gap.