c語言中的三字母詞以及轉義字元

2021-07-28 14:59:32 字數 1881 閱讀 7828

c語言中的三字母詞(trigraph)

在ansi c標準中,定義了9三字母詞(trigraph),三字母詞就是幾個字元的序列,合起來表示另乙個字元。三字母詞使c語言環境可以在缺少一些必需字元的字符集(比如,一些非常老式的鍵盤上沒有{}#\^~|)上實現。也許是由於這些字符集我們基本上用不到,所以在大多數c語言的書籍中,我們都看不到對三字母詞的講解。下圖列出了9個三字母詞以及它們所代表的的字元。

源**中的「三字母詞」,在編譯階段會被替換為「對應的字元」。對於以「?」開頭的字串行,如果不能與上面9個匹配,編譯器將保持原狀;一旦匹配,編譯器就會做替換。 下面是我們很容易犯的乙個錯誤(摘自《c和指標》):

如果我們想在螢幕上輸出字串"(are you ok??)"時,

printf("%s\n", "(are you ok??)");
由於編譯器對於三字母詞的處理所以導致我們看到的結果如下圖所示:

:由於編譯器的種類各樣,對ansi c的支援也不一樣,所以可能會有些c編譯器不處理「三字母詞」,會將它們當做普通的字串來處理。以上測試時我在vs2008編譯環境下完成的

所以這個時候大家應該要問了,那到底應該如何列印出我們想要的字串呢??方法也很簡單,**如下:

printf("%s\n", "(are you ok\?\?\)");
這次的測試結果如下圖:

printf("%d\n", strlen("c:\test\abc\test.c"));
在不看結果時,我們如果沒有了解關於轉義字元的概念,那麼這個字串的長度應該是18,可是執行結果卻出乎我們的意料,結果是15。

這是因為這個字串裡面有轉義字元的配對,"\t""\a"其實是兩個轉移字元,只占用乙個字元的長度。

如果我們想要上面的例子輸出原本的字串,那麼我們只要加上轉義字元'\'就好了。

printf("%s\n", "c:\test\abc\test.c");
結果如下圖所示:

顯然這不是我們想要的結果,所以我們可以這樣處理:

我們來看一下一些轉義字元變:

注意:其他的轉義字元較為常見,這裡要重點說的是最後兩個:

1."\ddd"字元'\'後面代表的是八進位制數字,舉個例子:

printf("%c\n", '\060');
『060』的十進位制結果應該是48,我們以字元形式輸出,則48是字元『0』的ascll碼值。結果如下圖所示:

2."\xddd"字元'\'後面代表的是三個十六進製制數,舉個例子:

printf("%c\n", '\x030');
『0x030』的十進位制結果也是48,所以輸出結果也是『0』。

今天的三字母詞和轉義字元就到這裡了,希望大家可以多多提意見!

三字母詞和轉義字元

在使用轉義字元之前我們先看一段 include int main 程式輸出的結果 為什麼這個程式不能正常的輸出我們想要的 are you ok 結果呢?原因在於這幾個字元的序列合併起來表示另乙個字元 三字母詞 三字母詞 表示字元 由於三字母詞的引入正常的想輸出 are you ok 這樣的內容就困難...

C語言中的三字母詞 trigraph

c語言中的三字母詞 trigraph 在ansi c標準中,定義了9個三字母詞 trigraph 三字母詞就是幾個字元的序列,合起來表示另乙個字元。三字母詞使c語言環境可以在缺少一些必需字元的字符集 比如,一些非常老式的鍵盤上沒有 上實現。也許是由於這些字符集我們基本上用不到,所以在大多數c語言的書...

leetcode 49 字母異位詞分組 C語言實現

leetcode 49 給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。思路 排序後的字串相等的放在一...