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

C語言三字母詞陷阱:?? 觸發替換與 \\? 正確輸出

     編輯:關於C語言

現象複現

#include <stdio.h>
int main() {
    printf("(Welcome??)");   // ?? 觸發三字母詞
    return 0;
}
// 輸出:(Welcome]   (因 ??) 被替換為 ])

三字母詞對照表 (ISO 646)

正確輸出 ?? 的方法

方法一:在每個 ? 前加反斜槓 (推薦)

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

\? 是標準轉義序列,專門用於阻止三字母詞識別。

方法二:雙重轉義 (輸出字面 \?)

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

適用場景

  • 字串常數中出現連續多個 ? (如 ???、??!??!)。
  • 正則表達式、URL 查詢字串、使用者輸入回顯等。

現代編譯器行為

  • GCC/Clang 預設**關閉**三字母詞 (需 -trigraphs 開啟)。
  • MSVC 預設關閉。
  • 嚴格遵循 C89/C99 的舊編譯器可能預設開啟。
  • **最佳實踐**:無論編譯器預設如何,見到 ?? 就寫 \\?,保證可移植性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
三字母詞替換為
??([
??)]
??<{
??>}
??=#
??/\
??'^
??-~
??!|