2013-07-02 58 views
2

我知道,\ x是ASCII文本的十六進制表示是什麼 X平均值用C

printf("%c",'\x41'); // A 
printf("%c",'\X41'); // 1 

爲什麼呢?

參考:http://c.comsci.us/etymology/literals.html(見最底表)

+3

請問你的編譯器警告你,'\ X'是'未知逃逸sequence'? – devnull

+1

大寫字母很重要,特別是在轉義序列中。 –

+1

拿回家的消息:** **總是編譯'GCC -Wall ...' –

回答

6

我請你同-Wall選項進行編譯。

aaa.c: In function ‘main’: 
aaa.c:6:14: warning: unknown escape sequence: '\X' [enabled by default] 
aaa.c:6:14: warning: multi-character character constant [-Wmultichar] 

從上述消息X被忽略。

並考慮'41',這是多字符字符常量。

正如@paddy所說,最後一個字符在使用的誹謗引號中。所以打印字符'1'。

組逃逸的序列

\a alert (bell) character    \\ backslash 
\b backspace       \? question mark 
\f formfeed       \’ single quote 
\n newline        \" double quote 
\r carriage return      \ooo octal number 
\t horizontal tab      \xhh hexadecimal number 
\v vertical tab 
+1

+1。 – 0decimal0

+0

是的,先生!你擊敗了我。 – BrainSteel

+3

...但ASCII值41 *不是*'1' ... – caf

8

這不是標準,那麼結果會有所不同。

由於\X不是有效的控制序列,因此您的特定編譯器正在選擇單引號中的最後一個字符並使用它。

所以,如果你這樣做:'\X12345'你可能會得到5\X沒有什麼特別的。如果你從你的傻乎乎的字符文字中取出,你會得到相同的結果。

+2

我可以確認在我的GCC版本上打印'\ X12345'確實會打印5。 – BrainSteel

1

第一行\x41是正確的,0x41是'A'的ASCII值,所以打印出'A'。

第二行是語法錯誤,因爲\ X(大寫)不是有效的轉義序列。現在發生的事情取決於你的編譯器,但GCC會將\ X4視爲無效並忽略它,並將'1'作爲文字字符進行打印。