循環寫入 0~126 的 ASCII 字元到文件,讀取時在第 26 個字元(0x1A,即 Ctrl+Z)遇到 EOF 導致程序提前結束。
Windows 文本模式("r"/"w")下,0x1A 被視為文件結束標記。讀取 fgetc 遇到該字節即返回 EOF,寫入 fputc 可能將其轉換或截斷。
// 寫入
FILE *out = fopen("1.txt", "wb"); // 二進制寫入
// 讀取
FILE *in = fopen("1.txt", "rb"); // 二進制讀取
"rb"/"wb"。\n <-> \r\n 轉換,且將 0x1A 視為 EOF。int c;
while ((c = fgetc(in)) != EOF) { // 直接用返回值判斷
printf("%d: %c\n", t++, c);
}
避免 while(!feof(in)) 導致多讀一次的經典陷阱。