c語言轉義字元

2021-08-13 09:37:45 字數 1277 閱讀 8049

今天遇到一道題:

有以下程式:

void main()

編譯時出現錯誤,以下敘述中正確的是()

a. 程式中只有a=』\』;語句不正確

b. b=』\xbc』;語句不正確

c. p=」\0127」;語句不正確

d. a=』\』;和c=』\0xab』;語句都不正確

答案是d,不知道為什麼,於是又去複習了一下c語言的轉義字元。常用的c語言轉義字元如下表所示:

這道題裡a= 『\』是不正確的,必須是a= 『\\』,因為\標識轉義字元,如果是 『\』,那\』就會被當做轉義字元,字元會缺乙個單引號,語法錯誤,需要後面再加個單引號,如a= 『\」,但這樣得到的字元就是\』了。關於b和c,轉義字元\h、\hh、\hhh斜槓後面的是1~3位八進位制數,該轉義字元為ascii碼等於該值的字元;轉義字元\xh、\xhh的\x後面的是1~2位十六進製制數,該轉義字元為ascii碼等於該值的字元。所以b= 『\xbc』是對的,相當於b=0xbc,也即十進位制的-68,雖然這個數對於ascii字元沒有意義,但作為char的數值是沒有錯的(char是帶符號八位整形,取值範圍為-128~127);c= 『\0xab』是錯的,沒有這個表示方法。p=「\0127」是對的,這裡\012是乙個轉義字元,相當於八進位制的12,查ascii表可知是換行符\n,所以p相當於p= 「\n7」。所以a和c變數是錯的,答案選d。

不過實際程式設計實現了以後發現c= 『\0xab』並沒有報錯,只是報了兩個warning,字元最後列印的值是 『b』。

warning: multi-character character constant [-wmultichar]

warning: overflow in implicit constant conversion [-woverflow]

這是因為 『\0xab』 其實是個多字元字元(multi-character character),它其實是四個字元 『\0』 『x』 『a』 『b』組成的,如果c是int型別的話,在windows系統下它的值會是7889250(120*256*256+97*256+98),但這裡c是個char型別,所以它的值就是末尾的8bit,也就是最後乙個字元 『b』。

最後附一下ascii碼表:

c語言轉義字元

轉義字元是一種特殊的字元常量。轉義字元以反斜線 開頭,後跟乙個或幾個字元。轉義字元具有特定的含義,不同於字元原有的意義,故稱 轉義 字元。例如,在前面各例題printf函式的格式串中用到的 n 就是乙個轉義字元,其意義是 回車換行 轉義字元主要用來表示那些用一般字元不便於表示的控制 常用的轉義字元及...

C語言轉義字元

轉義字元 意義 ascii 碼值 十進位制 1.n 換行 lf 將單簽位置移到到下一行開頭 010 2.a 響鈴 bel 007 3.b 退格 bs 將當前位置移到前一列 008 4.f 換頁 ff 將當前位置移到下頁開頭 012 5.r 回車 cr 將當前位置移到本行開頭 013 6.t 水平製表...

c語言轉義字元

1.認識轉義字元 所有的ascii碼都可以用 加數字 一般是8進製數字 來表示。而c中定義了一些字母前加 來表示常見的那些不能顯示的ascii字元,如 0,t,n等,就稱為轉義字元,因為後面的字元,都不是它本來的ascii字元意思了。在學習c最常見的是使用 n進行換行。轉移字元 實現 printf ...