Подтвердить что ты не робот

Строчные литералы, которые заканчиваются нулевым терминатором, содержат дополнительный нуль-терминатор?

Например:

char a[] = "abc\0";

Значит ли стандарт C сказать, что еще один байт значения 0 должен быть добавлен, даже если строка уже имеет нуль в конце? Итак, sizeof(a) равно 4 или 5?

4b9b3361

Ответ 1

Все строковые литералы имеют неявный нулевой ограничитель, независимо от содержимого строки.

Стандарт (6.4.5 Строковые литералы) говорит:

Байт или код нулевого значения добавляется к каждой многобайтовой последовательности символов, которая получается из строкового литерала или литералов.

Итак, строковый литерал "abc\0" содержит неявный нулевой ограничитель, в дополнение к явному. Итак, массив a содержит 5 элементов.