在擼**的時候遇到乙個問題,使用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快取機制詳解
兩類快取規則可以同時存在,強制快取優先順序高於對比快取,也就是說,當執行強制快取的規則時,如果快取生效,直接使用快取,不再執行對比快取規則。對於強制快取,伺服器會通知瀏覽器乙個快取時間,在快取時間內,直接使用快取,不在時間內,就執行比較快取策略 請求帶上時間,伺服器會對被請求資源的最後修改時間進行比...