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) 可捕獲此類空迴圈體。