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

C 語言轉義字符實戰:\0 空字符 vs \060 八進制,輸出結果為何是 "abab0efg"?

     編輯:程式設計疑難解答

C 語言轉義字符是新手必考、必會、必錯的知識點。本文以一道經典面試題為切入點,徹底講透 \0、\ddd 八進制轉義、字符串結束標記的交互邏輯。

題目代碼

int main() {
    int a = 1;
    printf("ab\0efg\n");
    printf("ab\060efg");
    return 0;
}

逐行執行解析

第一句:printf("ab\0efg\n");

  • \0 是空字符,ASCII 碼 0,同時也是 C 語言字符串的結束標記。
  • printf 遇到 \0 即停止輸出,後續 efg\n 在內存中存在但不被打印。
  • 輸出: ab(無換行,因 \n 被截斷)。

第二句:printf("ab\060efg");

  • \060 是八進制轉義:060₈ = 6×8¹ + 0×8⁰ = 48₁₀。
  • ASCII 48 對應字符 '0'(數字零)。
  • printf 繼續輸出後續 efg。
  • 輸出: ab0efg。

最終輸出

abab0efg

(第一句 ab 緊接第二句 ab0efg,中間無換行)

核心知識點總結

轉義形式含義示例結果
\0空字符(NUL),字符串結束符"A\0B"只輸出 A
\ddd1-3 位八進制數(0-377)\101 (65) → A對應 ASCII 字符
\xhh十六進制數\x41 → A對應 ASCII 字符
\n換行符 (LF, ASCII 10)"A\nB"換行輸出

避坑指南

  1. 八進制轉義不加前導 0 也可: \60 等同 \060,但建議補齊 3 位避免歧義(如 \060 vs \60 後跟數字)。
  2. 字符串長度計算: strlen("ab\0efg") == 2,sizeof("ab\0efg") == 7(含結束符)。
  3. 嵌入式開發: 發送二進制協議時,不能用字符串函數(strlen/strcpy/printf),需用 memcpy/write + 顯式長度。
  4. 十六進制更直觀: 現代代碼推薦用 \x30 代替 \060,可讀性更強。

延伸練習

// 輸出什麼?
printf("A\0B\063C\x44");
// 答案:A (遇 \0 結束) -> 輸出 "A"
printf("A\063B");  // \063 = 51 = '3' -> 輸出 "A3B"
printf("A\x30B");  // \x30 = 48 = '0' -> 輸出 "A0B"

掌握「\0 截斷輸出、\ddd 八進制轉字符」兩大規則,C 語言轉義字符題穩拿滿分。

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