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

C語言字符型變量賦值合法性判斷:單引號 vs 雙引號、轉義序列與溢出

     編輯:C 語言問答

題目回顧

已知 s 是字符型變量 (char),下列賦值語句正確的是?

A. s = 'abc';
B. s = '\08';
C. s = '\xde';
D. s = "\";

逐項分析

選項代碼合法性詳細解析
As = 'abc';❌ 非法單引號內只能包含單個字符;'abc' 是多字符常量,C 標準規定其值與實現相關,且不能賦給 char (通常會截斷並警告)。
Bs = '\08';✅ 合法\0 是八進制轉義,表示空字符 (ASCII 0);後面的 8 是普通字符 '8'。整個常量等價於 '8' (ASCII 56),完美適配 char。
Cs = '\xde';⚠️ 合法但有風險\xde 為十六進制轉義,值為 222 (0xDE)。若 char 為有符號 (典型範圍 -128~127),222 會溢出為 -34 (實現定義行為);若為無符號 (0~255) 則正常。賦值語法合法,但數值含義依賴 char 符號性。
Ds = "\";❌ 非法雙引號表示字符串字面量 (類型 const char*),指向內存中以 \0 結尾的字符數組,不能賦給 char 變量。若意圖賦反斜桿字符,應寫 s = '\\\\'; (雙重轉義)。

核心知識點總結

  1. 單引號 ' ' → 字符常量,類型 int (C89) / char (C++), 值為單字符編碼。
  2. 雙引號 " " → 字符串字面量,類型 const char*,指向只讀內存區。
  3. 轉義序列:
    • \ooo (1-3 位八進制) 如 \0、\101 ('A')
    • \xhh (1-2 位十六進制) 如 \x41 ('A')、\xde
    • \n \t \\ \' \" 等常用轉義
  4. char 符號性:C 標準未規定 char 是否帶符號,由編譯器決定 (x86 通常有符號,ARM 常無符號)。跨平台代碼涉及 >127 數值時,顯式使用 signed char 或 unsigned char。

正確答案與解析

正確選項:B

理由:'\08' 解析為字符 '8' (ASCII 56),完美適配 char 範圍,語法合法、語義明確、無溢出風險。

延伸練習

char c1 = 'A';        // 65
char c2 = '\101';     // 八進制 101 = 65 'A'
char c3 = '\x41';     // 十六進制 41 = 65 'A'
char c4 = '\n';       // 換行符 10
char c5 = '\\';       // 反斜桿 92 (需轉義)
unsigned char c6 = '\xde'; // 明確無符號,值 222 安全
signed char c7 = '\xde';   // 明確有符號,值 -34 (實現定義)

總結

判斷字符賦值合法性,關鍵看三點:

  1. 單引號內是否僅一個字符 (含轉義序列視為一個)。
  2. 是否誤用雙引號 (字符串指針) 賦給字符變量。
  3. 數值是否超出目標類型範圍 (signed char -128~127, unsigned char 0~255)。

選項 B 滿足所有條件,為唯一完全正確的賦值語句。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved