判断文件结束,feof……
2014-08-30 21:05
183 查看
因为文本文件中存储的是ASCII码,而ASCII码中FF代表空值(blank),一般不使用,所以如果读文件返回了FF,说明已经到了文本文件的结尾。但是如果是二进制文件,其中可能会包含FF,因此不能把读到EOF作为文件结束的条件,此时只能用feof()函数。
在VC里,只有当文件位置指针(fp->_ptr)到了文件末尾,然后再发生读/写操作时,标志位(fp->_flag)才会被置为含有_IOEOF。然后再调用feof(),才会得到文件结束的信息。因此,如果运行如下程序:
会发现多输出了一个FFFFFFFF,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多输出了一个-1(即FFFFFFFF)。 正确的写法应该是:
这么说其实feof()是可以用EOF来代替的喽?不是,这里还有一个问题。fgetc返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误! 这时我们需要feof()。
在VC里,只有当文件位置指针(fp->_ptr)到了文件末尾,然后再发生读/写操作时,标志位(fp->_flag)才会被置为含有_IOEOF。然后再调用feof(),才会得到文件结束的信息。因此,如果运行如下程序:
char c; while(!feof(fp)) { c = fgetc(fp); printf("%X\n", c); }
会发现多输出了一个FFFFFFFF,原因就是在读完最后一个字符后,fp->flag仍然没有被置为_IOEOF,因而feof()仍然没有探测到文件结尾。直到再次调用fgetc()执行读操作,feof()才能探测到文件结尾。这样就多输出了一个-1(即FFFFFFFF)。 正确的写法应该是:
char c; c = fgetc(fp); while(!feof(fp)) { printf("%X\n", c); c = fgetc(fp); }
这么说其实feof()是可以用EOF来代替的喽?不是,这里还有一个问题。fgetc返回-1时,有两种情况:读到文件结尾或是读取错误。因此我们无法确信文件已经结束, 因为可能是读取错误! 这时我们需要feof()。
相关文章推荐
- c语言 判断文件结束问题 feof()
- 判断文件结束有两种方法:EOF和feof()
- 判断文件结束有两种方法:EOF和feof()
- 判断文件结束函数(feof)
- 使用feof()函数判断文件是否结束
- c语言 判断文件结束问题 feof()
- C中判断文件结束的两种方法feof()和EOF
- 判断文件结束的两种方法: EOF和feof()
- 使用feof()判断文件结束时会多输出内容的原因
- 判断文件结束有两种方法:EOF和feof()
- C 库函数 feof(FILE*) 判断文件末尾的问题
- ObjectOuputStream判断文件读取结束
- java 中判断exe文件执行结束方法
- feof()和EOF的用法—— C中文件结尾的判断
- feof()和EOF的用法—— C中文件结尾的判断
- feof()和EOF的用法—— C中文件结尾的判断
- Linux C编程--操作文件结束和错误的判断方法(函数)
- c fread()在判断文件结束时需要注意的一些事
- 关于文件结束符EOF feof 区别
- 如何判断一个文件是否结束?