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

C 語言 while(fread(...)>0); 多一個分號導致迴圈體無條件執行

     編輯:程式設計綜合問答

錯誤代碼


while((num = fread(temp, sizeof(char), 512, ifp)) > 0); // ← 這裡有分號!
{
    fwrite(temp, sizeof(char), 512, ofp);
    printf("%d", num);
}

現象

  • fread 返回 0 (EOF),條件為假。
  • 但分號使 while 體為**空語句**,大括號變成獨立程式區塊,**無條件執行一次**。
  • printf 輸出 0。

修正


while((num = fread(temp, 1, 512, ifp)) > 0) { // 移除分號
    fwrite(temp, 1, num, ofp); // 寫入實際讀取位元組數 num,而非固定 512
    printf("%d", num);
}

補充最佳實踐

  • sizeof(char) 標準保證為 1,可直接寫 1。
  • fwrite 第三參數用 num (實際讀取量),避免檔案尾部寫入垃圾資料。
  • 檢查 fwrite 返回值確保寫入成功。
  • 編譯器警告 -Wempty-body (GCC/Clang) 可捕獲此類空迴圈體。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved