| 函數 | 功能 | 流 |
|---|---|---|
getchar() | 從stdin讀一字符 | stdin |
putchar(c) | 向stdout寫一字符 | stdout |
getc(fp) | 從流fp讀一字符 | 任意 |
putc(c, fp) | 向流fp寫一字符 | 任意 |
fgetc(fp) | 函數版getc | 任意 |
fputc(c, fp) | 函數版putc | 任意 |
getc/putc常為宏,fgetc/fputc保證為函數(可取地址、無副作用陷阱)。
| 模式 | 含義 |
|---|---|
"r" | 只讀,文件必須存在 |
"w" | 只寫,截斷/創建 |
"r+" | 讀寫,文件必須存在 |
"w+" | 讀寫,截斷/創建 |
"a" | 追加寫,創建 |
"a+" | 追加讀寫,創建 |
"b" | 二進制模式(Windows區分換行符) |
塊 I/O:fread / fwrite
fseek(fp, 0, SEEK_END); // 移至文件末尾 long size = ftell(fp); // 獲取文件大小 fseek(fp, 5, SEEK_SET); // 從開頭偏移5字節 fputs("X", fp); // 修改第6字節 rewind(fp); // 回到開頭
SEEK_SET開頭,SEEK_CUR當前,SEEK_END末尾(負偏移)。完整示例:鍵盤輸入存文件再讀出
錯誤處理模式
總結
stdio.h提供分層IO抽象:
• 字符級:getc/putc/fgetc/fputc
• 行級:fgets/fputs/gets(棄用)/puts
• 格式化:fprintf/fscanf/printf/scanf
• 塊級:fread/fwrite
• 定位:fseek/ftell/rewind
掌握模式字符串、EOF/錯誤檢查、文本vs二進制差異,是文件處理基礎。