中文字元在 C 語言中的處理
基本方法:char 陣列存儲多位元組編碼
#include
int main() {
char str[100];
printf("輸入中文: ");
scanf("%s", str); // 僅讀單詞(空白截止)
printf("輸出: %s\n", str);
return 0;
}
關鍵限制
scanf("%s") 遇空白(空格、換行、Tab)停止,無法讀含空格字串
char 陣列按字節存儲,中文編碼(UTF-8/GBK)佔 2-3 字節/字
- 終端機編碼必須與源碼編碼一致,否則顯示亂碼
進階:讀取整行含空格字串
#include
int main() {
char line[200];
printf("輸入一行中文: ");
fgets(line, sizeof(line), stdin); // 讀整行含換行符
// 移除尾部換行符
size_t len = strlen(line);
if (len > 0 && line[len-1] == '\n') line[len-1] = '\0';
printf("輸出: %s\n", line);
return 0;
}
字元編碼深度解析
| 編碼 | 中文字節數 | 適用場景 | C語言支援 |
| GBK/GB2312 | 2 字節 | Windows 簡體中文舊系統 | char[] 直接存儲 |
| UTF-8 | 3 字節(常用漢字) | 現代標準、Linux、Web、跨平台 | char[] 存儲,需庫處理 |
| UTF-16 | 2 或 4 字節 | Windows API、Java、Qt | wchar_t[] 配合宽字符函數 |
寬字元版本 (Unicode 規範做法)
#include
#include
#include
int main() {
setlocale(LC_ALL, ""); // 關鍵:啟用當地環境
wchar_t wstr[100];
wprintf(L"輸入中文: ");
wscanf(L"%ls", wstr); // %ls 讀寬字串
wprintf(L"輸出: %ls\n", wstr);
return 0;
}
編碼一致性檢查清單
- 源碼檔案編碼:UTF-8 with BOM (推薦) 或 GBK
- 終端機編碼:Windows Terminal/PowerShell 設置 UTF-8 (chcp 65001)
- 編譯器選項:GCC
-fexec-charset=UTF-8、MSVC /source-charset:utf-8 /execution-charset:utf-8
- 運行環境 locale 支援中文
- 上一篇文章: C語言編輯器16位子系統錯誤解決:注冊表VDD修復
- 下一篇文章: C語言邏輯運算符優先級:a||b&&c 解析
Copyright ©
程式碼之家 All Rights Reserved