2013-07-30 14 views
31

ヌルターミネータで終わる文字列リテラルには、追加のヌルターミネータが含まれていますか?たとえば

char a[] = "abc\0"; 

は、標準Cが値0の別のバイトが文字列がすでに終わりにゼロを有する場合であっても追加されなければならないことを言うのでしょうか?したがって、sizeof(a)は4または5に等しいですか?

+1

あなたの質問には英語で何も問題はありません。しかし、単にそれを試して答えを見つけることができませんでしたか? – Barmar

+2

明示的にするには、 'char a [] = {'a'、 'b'、 'c'、 '\ 0'};'と書くことができます。これは文字列リテラルとして宣言されていないので、余分な終了nullは付加されません。 –

+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'} –

関連する問題