feof使用注意

本文详细解释了在使用feof()函数判断文件结束时的常见错误,以及如何正确使用feof()避免多读取文件数据的问题。通过实例演示正确的循环读取文件的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言


有時候在使用檔案讀寫時,會遇到要判斷檔案結尾的需求,而C/C++語言在<stdio.h>中有提供一個feof()的函式幫助我們判斷,但是在使用時,請先了解它的使用時機。

發生狀況->多讀一次?


下面的寫法模式會發生多讀取的case,而這個原因在於使用feof的時機不對。

FILE* pf;
 while(!feof(pf)){
   //fread 讀取
   //資料處理
 }

feof的解讀


feof是發生在fread使用"讀取過檔案"後,已讀到End-of-file位置時,回傳的指標才會是true(檔案結尾),所以上面的寫法在讀完最後一筆後,指標會停留在End-of-file位置前,需要再讀一次到在End-of-file位置後(判斷讀取資料失敗,因為已讀到eof),才會為true,而因為fread讀取失敗,buffer的資料不會改變,所以才會多讀一筆,如下圖:

解決方式


 改善的方式,如先使用fread讀取,再來判斷feof,當feof判斷為true時就跳離loop

while(1){
  //fread讀取
  if(feof(pf)) break;
}
 
转自:http://software.intel.com/zh-cn/blogs/2013/10/25/ccfeof/?utm_campaign=优快云&utm_source=intel.youkuaiyun.com&utm_medium=Link&utm_content=others-feof
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值