2017-03-07 108 views
7

我通過這四個方面困惑:標準字符串文字和字符串文字?

  • 字符串文字

  • 字符常量

  • 字符串文字。

  • 多字節字符序列

而且讀這句話在C Standard

字符串文字不一定是一個字符串(參見7.1.1),因爲 空字符可以通過\0轉義序列嵌入其中。

第一部分是什麼意思?

+0

字符串文字==字符串文字 – DyZ

+0

@DYZ不完全。該標準正在談論字符,UTF-8和寬字符串文字。不過,我認爲這個問題是關於字面與字符串。 – AlexD

+1

根據定義,字符串由空字符終止。字符串文字可能在其中包含空字符。因此,字符串文字可能不是字符串。 –

回答

3

字串文本

  • 任一個字符串文字,例如​​;
  • UTF-8字符串文字,例如, u8"abc";
  • 寬字符串文字,例如, L"abc"

從標準(重點煤礦):

字符串文字是封閉在 雙引號,作爲"xyz"零個或多個多字節字符的序列。 A UTF-8字符串文字是相同的,除了前綴爲u8。 A 寬字符串文字與相同,但以字母LuU作爲前綴。
....
在翻譯階段7,字符或值爲零的代碼被附加到每個多字節 字符序列,該字符序列由一個或多個字符串文字產生。 78)

78)字符串文字不必是一個字符串(見7.1.1),因爲一個空字符可以由 \ 0轉義序列被嵌入在它。


是由封端的字符的連續序列和包括第一個空字符

所以一個字符串文字可能有\0也在中間還是開頭,例如"a\0b""\0ab"。我認爲這是腳註說的。

字符常數C-炭序列(通常是單個字符)在單引號,一個可能的前綴L/u/U

一個整數的字符常數的封閉 在單引號的一個或多個多字節字符的序列,如在'x'。寬字符常量是相同的,除了 字母LuU的前綴。

所以術語不是很對稱,IMO。例如。寬字符常量是字符常量的特例。然而,字符串文字和寬字符串文字屬於字符串文字。

+0

看起來你錯過了下劃線。希望我解決它的權利。 –

+0

@MadPhysicist謝謝!我認爲我們並行編輯)。 – AlexD

+0

因此,包含空字符的字符串字面也會被空字符終止? – Sabrina