首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言文件操作基石:文本與二進制模式、漢字編碼本質與標準庫架構

     編輯:關於C語言

文件的兩種面貌:文本 vs 二進制

狹義上:文本文件僅含可見字元,以 EOF 標記結束;二進制文件包含圖片、聲音、可執行檔等。
廣義上(計算機視角):所有文件在磁碟/記憶體中均以二進制位元組序列儲存。差異僅在讀寫時的解釋與轉換規則。

漢字在計算機中的三層編碼體系

關鍵流程:輸入碼 → 機內碼(儲存) → 字模庫查字形碼 → 顯示裝置渲染。

驗證機內碼:實測程式碼


#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 模式字串全解析與指標位置實測。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
編碼層用途範例
輸入碼鍵盤輸入漢字拼音碼、五筆碼、區位碼
機內碼記憶體/磁碟儲存GB2312/GBK:兩字節,高位為 1(如「我」= 0xCE 0xD2)
字形碼螢幕顯示/列印輸出點陣(16×16=32字節)或矢量字型