注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

C++小知识45——判断文件的结尾  

2013-10-29 14:07:28|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
C++小知识45——判断文件的结尾

在大家操作标准库提供的文件操作时,经常遇到下面这种情况,那就是判断何时文件到末尾了,然后就直接退出。以标准库里也提供了这么一个函数feof()。下面看一下这个库函数的使用的不妥一个方案:
   FILE * f;
   while (!feof(f))
   {
        fread(...);
        ...... 
   }
这种方法有什么不妥呢?乍一看没问题啊。其实大家仔细的考虑一下就应该明白,先看feof的说明:这个函数是在fread这个函数读取文件时,读到文件结尾位置符(End-of-file),也就是说,文件的指针必须在eof之后,才会返回一个true的值 ,说明结尾到了。但是
上面的程序是先判断再读,设想这么一种情况:fread读到了最后一个字符(假设为Z)。这个Z字符后面就是eof结尾标记。这时候,文件的指针尚在最后一个字符(Z)前,这时候,fread读取是没有问题的。成功把Z读走,但此时循环开始判断是否文件尾,可此时文件的
指针尚在eof前。而此时大家也知道后面已经没有数据可读了。所以白白多读了一次。
正确的方法:
    while (1)
    {
        if (feof(f))
        {
            break;
        }
        ......
    }

先用fread读,然后再来判断feof,当feof判断为真时,退出读取。

勿以知识点小而不重视啊。
  评论这张
 
阅读(426)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017