首页 > 其他 > 详细

feof与块读写

时间:2015-08-15 16:36:47      阅读:168      评论:0      收藏:0      [点我收藏+]

feof

  #include <stdio.h>
  void clearerr(FILE *stream);
  int feof(FILE *stream);
  int ferror(FILE *stream);
  int fileno(FILE *stream);

feof是用来判断文件是否到达文件尾的一个函数,当读到一个文件的末尾时返回非零值,若没有到末尾则返回0。

开始觉得挺好理解的,就是用来判断是否到达文件末尾而已,但是到大一期末课设用的时候才发现问题,而且很多人都有同样的问题,当时也想不出所以然,以为是使用块读写惹的祸,于是改用格式化文件输入输出,不知怎么地也就解决了,但是现在要使用块读写时又复现这个问题了,最后才知道原来feof并非。。。

首先,百度百科中有这样一句话来解释位置和内容:“你走到火车的最后一节车箱”这就是位置,而“请你一直向后走,摸到铁轨结束”这就是内容。也就是说用内容来判断会“多走一节”。这就是完全依赖于“while(!feof(FP)){…}”进行文件复制时,目标文档总会比源文档“多出一些”的原因。

说白了就是:当你的文件指针已经读取到最后了,但是feof还是会返回没有到文件的末尾,你再去读一次,读到了一次空的数据,这时用feof判断才会真正的返回非0值,表示文件到达文件尾了。

为了解决这个问题,当我们读取一个块时我们可以这样去写:

while(fread(void *ptr, sze_t size, size_t nmemb, FILE *stream) != 0 && !feof(fp))
{}

意思就是让它先去读一块,然后判断是否到达文件末尾,如果到达文件末尾,那么刚才读出的那一块内存也是空的,直接丢弃就好了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

feof与块读写

原文:http://blog.csdn.net/zhuxinquan61/article/details/47681973

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!