:ヌルターミネータで終わる文字列リテラルには、追加のヌルターミネータが含まれていますか?たとえば
char a[] = "abc\0";
は、標準Cが値0
の別のバイトが文字列がすでに終わりにゼロを有する場合であっても追加されなければならないことを言うのでしょうか?したがって、sizeof(a)
は4または5に等しいですか?
:ヌルターミネータで終わる文字列リテラルには、追加のヌルターミネータが含まれていますか?たとえば
char a[] = "abc\0";
は、標準Cが値0
の別のバイトが文字列がすでに終わりにゼロを有する場合であっても追加されなければならないことを言うのでしょうか?したがって、sizeof(a)
は4または5に等しいですか?
すべての文字列リテラルは、文字列の内容にかかわらず、暗黙のヌル終了文字を持っています。
標準(6.4.5文字列リテラル)は言う:ゼロ値の
バイトまたはコードは、リテラルまたはリテラル文字列から生じる各マルチバイト文字列に付加されます。
文字列リテラル"abc\0"
には、明示的なヌルターミネータと暗黙のヌルターミネータが含まれています。したがって、配列a
には5つの要素が含まれています。
'したがって、配列aには5つの要素が含まれています。' 「4」要素を意味しますか? –
@BikalGurung:いいえ、5が正しいです。 {'a'、 'b'、 'c'、 '\ 0'、 '\ 0'} –
あなたの質問には英語で何も問題はありません。しかし、単にそれを試して答えを見つけることができませんでしたか? – Barmar
明示的にするには、 'char a [] = {'a'、 'b'、 'c'、 '\ 0'};'と書くことができます。これは文字列リテラルとして宣言されていないので、余分な終了nullは付加されません。 –
また、 'char a [4] =" abc \ 0 ";'と書くこともできます。 – nwellnhof