feof使用注意
2013-11-08 13:17
501 查看
前言
有時候在使用檔案讀寫時,會遇到要判斷檔案結尾的需求,而C/C++語言在<stdio.h>中有提供一個feof()的函式幫助我們判斷,但是在使用時,請先了解它的使用時機。
發生狀況->多讀一次?
下面的寫法模式會發生多讀取的case,而這個原因在於使用feof的時機不對。
feof的解讀
feof是發生在fread使用"讀取過檔案"後,已讀到End-of-file位置時,回傳的指標才會是true(檔案結尾),所以上面的寫法在讀完最後一筆後,指標會停留在End-of-file位置前,需要再讀一次到在End-of-file位置後(判斷讀取資料失敗,因為已讀到eof),才會為true,而因為fread讀取失敗,buffer的資料不會改變,所以才會多讀一筆,如下圖:
![](http://files.dotblogs.com.tw/v6610688/1310/2013102323291549.jpg)
解決方式
改善的方式,如先使用fread讀取,再來判斷feof,當feof判斷為true時就跳離loop
原文:http://software.intel.com/en-us/node/486584
![](https://img-blog.csdn.net/20131108130505656?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFuZHVubGFi/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
有時候在使用檔案讀寫時,會遇到要判斷檔案結尾的需求,而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的資料不會改變,所以才會多讀一筆,如下圖:
![](http://files.dotblogs.com.tw/v6610688/1310/2013102323291549.jpg)
解決方式
改善的方式,如先使用fread讀取,再來判斷feof,當feof判斷為true時就跳離loop
while(1){ //fread讀取 if(feof(pf)) break; }
原文:http://software.intel.com/en-us/node/486584
相关文章推荐
- feof使用注意
- feof使用注意
- php 使用feof时要注意了,小心变while ( ! feof(null) ) 死环
- ftell、fread、fseek、feof 详细的使用介绍与注意细节
- 函数feof使用注意事项
- Oracle存储过程中使用记录类型注意的问题
- 循环使用summit调用另外一个报表时,注意事项
- 对于使用fb建立flex库文件被其他as工程使用的注意事项
- Junit4使用注意事项
- 移动端audio标签的使用及注意点
- MySQL索引类型总结和使用技巧以及注意事项
- MyBatis排序时使用order by 动态参数时需要注意,用$而不是#, #{}和${}的区别以及order by注入问题
- pl/sql developer使用注意事项
- cygwin跨平台移植 gcc+vc联合使用的方法和注意事项
- Flash 与 FlashBuild 结合使用时的一些注意事项
- TypeScript 中的 this 使用注意
- Lua脚本接入Android使用JNI调用本地接口,需要注意的问题
- 顺序表java.util.list使用注意点
- struct使用注意事项
- ralloc、malloc使用时的注意事项