| 編碼層 | 用途 | 範例 |
| 輸入碼 | 鍵盤輸入漢字 | 拼音碼、五筆碼、區位碼 |
| 機內碼 | 記憶體/磁碟儲存 | GB2312/GBK:兩字節,高位為 1(如「我」= 0xCE 0xD2) |
| 字形碼 | 螢幕顯示/列印輸出 | 點陣(16×16=32字節)或矢量字型 |
關鍵流程:輸入碼 → 機內碼(儲存) → 字模庫查字形碼 → 顯示裝置渲染。
驗證機內碼:實測程式碼
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "我"; // UTF-8 原始碼檔編碼下通常為 3 字節
unsigned char* p = (unsigned char*)s;
printf("strlen=%d\n", strlen(s)); // 位元組長度
printf("Byte0=0x%X\n", p[0]);
printf("Byte1=0x%X\n", p[1]);
return 0;
}
輸出解析:若原始碼為 GBK 編碼,strlen=2,輸出 CE D2;若為 UTF-8,strlen=3,輸出 E6 88 91。原始碼檔案編碼決定了字串常值的位元組表示。
C 標準庫文件操作架構概覽
核心類型:FILE*(不透明結構體,封裝檔案描述符、緩衝區、位置指標、錯誤狀態等)。
核心函數族群:
- 開啟/關閉:
fopen/fclose/freopen
- 字元讀寫:
fgetc/fputc/getc/putc
- 字串讀寫:
fgets/fputs/gets(棄用)/puts
- 格式化讀寫:
fscanf/fprintf/fscanf_s/fprintf_s
- 塊讀寫:
fread/fwrite(結構體、二進制塊)
- 位置控制:
fseek/ftell/rewind/fgetpos/fsetpos
- 狀態檢查:
feof/ferror/clearerr
文本模式 vs 二進制模式:唯一的實質差異
僅在 Windows 平台:
- 文本模式寫入
\n (0x0A) → 實際存入 \r\n (0x0D 0x0A)
- 文本模式讀取
\r\n → 自動轉為 \n
- 二進制模式:零轉換,位元組原樣流動
Linux/Unix:無差異,\n 即換行,無 \r。
工程鐵律:處理二進制資料(圖片、結構體序列化、跨平台協議)必須用 "b" 模式("rb"/"wb"),避免換行符被竄改導致資料損壞。
總結
理解「一切皆位元組」、掌握編碼三層體系、分清文本/二進制模式語義差異,是 C 語言文件操作不踩坑的三大基石。下篇將深入 fopen 模式字串全解析與指標位置實測。
- 上一篇文章: C++ 內聯函數深度解析:替代宏的零開銷抽象、編譯器決策與最佳實踐
- 下一篇文章: C 語言 fopen 詳解:六大模式字元組合、指標初始位置實測與文本/二進制模式差異驗證
Copyright ©
程式碼之家 All Rights Reserved