我沒有在C標準中找到解釋如何處理寬字符串中的上述轉義序列。C標準:L前綴和八進制/十六進制轉義序列
例如:
wchar_t *txt1 = L"\x03A9";
wchar_t *txt2 = L"\xA9\x03";
難道這些不知怎麼處理(如前面添加\ x00的字節每個字節),或者存儲在內存中,正是因爲他們在這裏宣佈的一樣嗎?
另外,L前綴如何按照標準運行?
編輯:
讓我們考慮TXT2。它將如何存儲在內存中? \ xA9 \ x00 \ x03 \ x00或\ xA9 \ x03是否寫入? \ x03A9也一樣。這會被認爲是一個寬字符還是2個獨立的字節,可能會變成兩個寬字符?
EDIT2:
標準說:
後面的反斜線和一個十六進制字母x逃脫 序列中的十六進制數字被認爲是單個字符的建設的一部分的整數 字符常量或寬字符常量的單寬字符。如此形成的十六進制整數的 數值指定所需的 字符或寬字符的值。
現在,我們有一個文字字符:
wchar_t txt = L'\xFE\xFF';
它由2個進制轉義序列,因此它應該被視爲兩個寬字符。如果這是兩個寬字符不能放入一個wchar_t的空間(但它編譯的MSVC),並在我的情況下,該序列被視爲如下:
wchar_t foo = L'\xFFFE';
這是唯一的十六進制轉義序列,因此唯一的寬字符。
EDIT3:
結論:每個辛/十六進制序列被視爲一個單獨的值(wchar_t的* TXT2 = L 「版權所有\ xA9 \ X03」;由3個要素)。 wchar_t txt = L'\ xFE \ xFF';不可移植 - 實現定義的功能,應該使用wchar_t txt = L'\ xFFFE';
@KerekSB代碼固定 – user206334 2013-04-07 18:45:23
關於您的編輯:誰在乎? 'txt2'按順序指向具有值爲0xA9,0x03和0x00的三個類型爲「wchar_t」的整數數組的第一個元素。該類型的表示取決於您的平臺(並且可以通過將每個整數視爲字節數組來檢查)。 – 2013-04-07 19:24:25
@KerrekSB:問題被標記爲C.字符串文字是隻讀的(在修改它們時有未定義的行爲),但不是'const'。 'char * s =「hello」;'完全合法,但承認是危險的; *應該*是'const',但是編譯器沒有義務提醒它。 – 2013-04-07 19:25:02