2017-03-09 23 views
0

在此基礎上: xFF不在轉義序列的可表示值範圍內?

一個八進制或十六進制轉義序列的值應在 範圍爲unsigned char類型表示的值的用於 整數字符常量,或對應於 wchar_t的無符號的類型爲寬字符常量。

字節= 8位的八進制序列範圍爲[0,255]。

但進一步他們使用的一個示例:

實施例3即使八位用於具有類型char,施工「\ X123」對象指定只含有一個字符的整數字符常數,

是不是違反了第一個約束作爲\x123超過255?

+0

對不起,我採取了錯誤的例子。 – Sabrina

回答

2

'\x123'是違反的時候char爲8〜位爲'\x123',其超過了255.

這是不是使用的示例。在C時的參數示例接着說:

...指定包含兩個字符,其值'\x12''3',施工'\0223'可以使用整數字符常量,因爲一個八進制轉義序列之後終止三個八進制數字。 (這兩個字符的整數字符常數的值是實現德音響定義。)C11§6.4.4.414

'\xFF'是在範圍內,但'\xFF$',其中$是一些十六進制字符,不在範圍內。


換句話說,一個十六進制轉義序列不會停止,直到用盡所有十六進制字符。在8位的char系統上,不限於2個字符。

0

ideone發出警告,並把文字,彷彿它是\ X23

int main(void) { 
    // your code goes here 
    char x = '\x123'; 
    printf("%d\n",x); 
    return 0; 
} 

prog.c:5:11: warning: hex escape sequence out of range 
    char x = '\x123'; 
      ^~~~~~~ 

Success time: 0 memory: 9432 signal:0 
35 

所以無論你是引用不是很好

+0

「無論你引用的是不是很好」似乎是C規範。 – chux