2013-07-30 91 views
31

例如:以null結束符結尾的字符串文字是否包含額外的null結束符?

char a[] = "abc\0"; 

是否標準C說的價值0另一個字節必須即使串已經在最後一個零追加?那麼,sizeof(a)等於4還是5?

+1

在你的問題中,英語絕對沒有錯。但是,難道你不能通過簡單的嘗試找到答案嗎? – Barmar

+2

如果你想明確,你可以寫:'char a [] = {'a','b','c','\ 0'};'。這不是聲明爲字符串文字,因此不會追加額外的終止空值。 –

+0

或者,你可以寫'char a [4] =「abc \ 0」;'。 – nwellnhof

回答

50

所有字符串文字都有一個隱式空終止符,而不管字符串的內容如何。

標準(6.4.5字符串文字)表示:

一個字節或零值代碼被附加到從字符串產生字面或文字每個多字節字符序列。

因此,字符串文字"abc\0"包含隱式的空終止符,除了明確的終止符。所以,數組a包含5個元素。

+0

'所以,數組a包含5個元素。' 你的意思是'4'元素? –

+10

@BikalGurung:不,5是正確的。 {'a','b','c','\ 0','\ 0'} –