關於feof機制的詳解

2021-10-01 19:57:09 字數 1136 閱讀 1785

在擼**的時候遇到乙個問題,使用feof(fp)做為檔案結束檢測,使用fscanf讀取檔案,但是往往會

讀取最後一行兩次。

測試文件如下:

測試**如下:

#include #include int main()

fclose(fp);

return 0;

}

測試結果如下:

從結果上來看,test4輸出了兩次,然而我只需要輸出一次。

查詢feof命令原型

man feof
結果如下:

由此我們知道feof的函式原型

int feof(file *stream);
feof的作用

feof會檢測檔案指標是否到達檔案末尾,如果到了,返回乙個非零值。

注意:feof函式讀取檔案最後乙個字元的時候依然會返回0,表明沒有到達檔案結尾,只有再往後讀取字元(越過最後乙個字元),feof()才會返回乙個非零值,表示到達檔案結尾。

測試**

#include #include int main()

printf("%s\n\n",strtmp);

}fclose(fp);

return 0;

}

執行結果

能夠正常執行。

這個問題出在對結束檢測的不精準,feof行進過程類似於,乙個機械人在火車上從頭往後走,前進乙個格仔,打兩邊的人(fscanf()),一人一耳光,如果有人,喊一聲(返回0),如果沒人,喊大一聲(返回1),但它確定有沒有人,是先打才能確定。

feof函式詳解

feof函式詳解 網上很多feof 講解的很模糊,百看不如一試,經過筆者在編譯器的親自測試之後總結如下 第一種情況 如果沒有使用fread 讀取檔案而直接使用 feof 函式得到的返回值是0 第二種情況 使用fread 讀取檔案,假設使用 fread buf,1,1,filp 乙個位元組乙個位元組的...

關於中feof 函式的問題

一 原型 1.在標頭檔案stdio.h中有如下巨集定義 gcc define feof f f flag ioeof define ioeof 0x0010 eof reached on read 2.原型宣告 crtimp int cdecl mingw nothrow feof file 3.f...

關於http快取機制詳解

兩類快取規則可以同時存在,強制快取優先順序高於對比快取,也就是說,當執行強制快取的規則時,如果快取生效,直接使用快取,不再執行對比快取規則。對於強制快取,伺服器會通知瀏覽器乙個快取時間,在快取時間內,直接使用快取,不在時間內,就執行比較快取策略 請求帶上時間,伺服器會對被請求資源的最後修改時間進行比...