首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C fread 循環讀取文件提前返回 0:檢查文件打開模式與 feof 判斷時機

     編輯:程式設計綜合問答

while(!feof(pfile)) 模式易導致多讀一次,且 fread 返回 0 可能原因:

  1. 文件未以二進制模式打開("rb"),Windows 下文本模式遇 0x1A 視為 EOF。
  2. 結構體對齊導致讀取長度 leng 解析錯誤,後續偏移錯位。
  3. 文件實際大小小於預期,讀完後 feof 尚未置位,下一輪 fread 返回 0。

改進

while (1) {
    int r = fread(&leng, sizeof(int), 1, pfile);
    if (r != 1) break; // 讀不到長度直接退出
    // 後續同理檢查每個 fread 返回值
}

以實際讀取項數為循環條件,避免 feof 滯後。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved