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

Linux C 語言文件複製出現跳字符錯誤:fgetc 多次調用導致指針偏移

     編輯:程式設計綜合問答

錯誤代碼

while (fgetc(fp) != EOF) {
    printf("%c", fgetc(fp));   // 第 2 次調用
    fputc(fgetc(fp), fp1);     // 第 3 次調用
}

問題分析

每次循環調用 3 次 fgetc:

  1. 條件判斷讀取字符 A
  2. printf 讀取字符 B 並輸出
  3. fputc 讀取字符 C 寫入目標文件

結果:文件內容每 3 個字符只寫入第 3 個,屏幕輸出第 2 個,丟失 2/3 數據。

正確寫法

int ch;
while ((ch = fgetc(fp)) != EOF) {
    putchar(ch);          // 輸出屏幕
    fputc(ch, fp1);       // 寫入文件
}

核心原則:每次循環只調用一次讀取函數,結果存入變量複用。

進階:大文件高效複製

char buf[8192];
size_t n;
while ((n = fread(buf, 1, sizeof(buf), fp)) > 0) {
    fwrite(buf, 1, n, fp1);
}
  • 塊讀寫,減少系統調用開銷
  • 自動處理二進制/文本模式差異

常見陷阱總結

錯誤模式後果修正
while(fgetc(fp)!=EOF) fputc(fgetc(fp), fp1)跳過一半字符存變量複用
feof(fp) 控制循環多寫一次 EOF用返回值判斷
文本模式複製二進制Windows 上 \\r\\n 被轉換用 rb/wb
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved