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

C語言轉義字元陷阱:?? 三字母詞 導致輸出異常

     編輯:關於C

現象

printf("(Welcome??)"); // 輸出: (Welcome]

原因:C 標準定義 三字母詞,??) 會被預處理器替換為 ](右中括號),歷史原因是為了缺乏特定鍵盤的舊系統。

三字母詞對照表 (共 9 組)

三字母詞替換為
??=#
??/\
??'^
??([
??)]
??!|
??<{
??>}
??-~

解決方案

  1. 字串字面量中拆開:"(Welcome?\?)" → 輸出 (Welcome??)。
  2. 雙重轉義:"(Welcome\\?\\?)" → 輸出 (Welcome\?\?) (字面反斜線+問號)。
  3. 編譯器關閉:GCC -fno-trigraphs (C++17/C23 已移除三字母詞,現代編譯器預設關閉)。

教訓

避免在字串中出現 ?? 序列。若需輸出問號,習慣寫 \? 或拆分字串。

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