字符(char)是 C 語言處理文本的基礎單元。本文系統梳理字符常量表示、轉義字符體系、字符變量存儲機制、字符與整數互轉、字符串結構與結束標誌,並通過實例演示大小寫轉換、ASCII 碼操作等高頻技巧。
'a'、'Z'、'='、'\n'。'ab' 非法)。'5'(ASCII 53)≠ 數值 5,不可直接參與算術運算。以反斜線 \ 開頭,表示不可打印或有特殊含義的控制字符:
| 轉義序列 | 含義 | ASCII (十進制) |
|---|---|---|
\n | 換行 | 10 |
\t | 水平製表 | 9 |
\r | 回車 | 13 |
\b | 退格 | 8 |
\\ | 反斜線本身 | 92 |
\' | 單引號 | 39 |
\" | 雙引號 | 34 |
\0 | 空字符(字符串結束標誌) | 0 |
\ddd | 1-3 位八進制 ASCII 碼 | 如 \101 = 'A' |
\xhh | 1-2 位十六進制 ASCII 碼 | 如 \x41 = 'A' |
printf("ab c\tde\rf\n"); // 輸出:ab c de
// f
printf("hijk\tL\bM\n"); // \b 退格覆蓋 L → 輸出:hijk M
char 佔 1 字節(8 位),存儲 ASCII 碼(0-127)或擴展字符集編碼。char a = 'x'; 等價於 char a = 120;。int(通常 2/4 字節)賦值給 char 只保留低 8 位。#include <stdio.h>
int main(void) {
char a, b;
a = 120; b = 121; // 整數賦字符變量
printf("%c, %c\n", a, b); // 輸出:x, y (用 %c 解釋為字符)
printf("%d, %d\n", a, b); // 輸出:120, 121 (用 %d 解釋為整數)
return 0;
}
char a = 'a', b = 'b';
a = a - 32; // 'a'(97) - 32 = 65 → 'A'
b = b - 32; // 'b'(98) - 32 = 66 → 'B'
printf("%c, %c\n%d, %d\n", a, b, a, b); // 輸出:A, B / 65, 66
標準庫提供 toupper()/tolower()(<ctype.h>),更具可移植性(支持非 ASCII 字符集)。
"CHINA"、"C program"。\0**(ASCII 0),作為字符串結束標誌。"a" 佔 2 字節('a'、\0),而字符 'a' 僅佔 1 字節。char str[] 或指針 char *str 存儲。'a' → [61] (1 byte)
"a" → [61] [00] (2 bytes)
"C program" → [43] [20] [70] [72] [6F] [67] [72] [61] [6D] [00] (10 bytes)
| 錯誤寫法 | 問題 | 正確寫法 |
|---|---|---|
char c = "a"; | 字符串指針賦給字符變量 | char c = 'a'; |
char *p = 'hello'; | 字符常量當地址 | char *p = "hello"; |
if (str1 == str2) | 比較指針地址而非內容 | if (strcmp(str1, str2) == 0) |
忽略 \0 空間 | 數組越界、字符串函數誤判 | 定義數組時 +1:char buf[100] |