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

C語言字符與字符串深度解析:表示、轉義、存儲與大小寫轉換實戰

     編輯:關於C語言

字符(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
\ddd1-3 位八進制 ASCII 碼如 \101 = 'A'
\xhh1-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;
}

大小寫轉換:利用 ASCII 碼差值 32

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),作為字符串結束標誌。
  • 佔用內存 = 字符數 + 1 字節。"a" 佔 2 字節('a'、\0),而字符 'a' 僅佔 1 字節。
  • C 無專門字符串類型,慣用字符數組 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]
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved