以 "w" 模式打開文件 → fputs 寫入 → fgetc 讀取(觸發錯誤/EOF 標誌) → clearerr 清除標誌 → 再次 fputs。能否成功?
"w" 模式只能寫入,fgetc 讀取會失敗,設置錯誤標誌,文件指針後移 1 字節(未定義行為)。clearerr 僅清除錯誤/EOF 標誌,不改變文件指針位置。fputs 會從當前指針位置寫入,導致數據錯位或覆蓋。void main() {
FILE *pf = fopen("F:\\1.txt", "w+"); // 必須用 w+/r+/a+ 支持讀寫
if (!pf) return;
fputs("jhhhbjuh", pf); // 寫入
char ch = fgetc(pf); // 讀取(指針後移 1)
clearerr(pf); // 清除錯誤標誌
fseek(pf, -1, SEEK_CUR); // 關鍵:指針回退 1 字節
fputs("asdffffff", pf); // 正確位置追加
fclose(pf);
}
w+、r+、a+,單純 w/r/a 不支持雙向操作。fseek/rewind/fsetpos 定位指針。fflush(pf) 確保數據落盤。C 標準規定:在更新流(+ 模式)中,輸入操作後進行輸出操作,或反之,必須中間插入文件定位函數(fseek 等)或 fflush,否則行為未定義。