Строчные литералы, которые заканчиваются нулевым терминатором, содержат дополнительный нуль-терминатор?
Например:
char a[] = "abc\0";
Значит ли стандарт C сказать, что еще один байт значения 0 должен быть добавлен, даже если строка уже имеет нуль в конце? Итак, sizeof(a) равно 4 или 5?
Ответ 1
Все строковые литералы имеют неявный нулевой ограничитель, независимо от содержимого строки.
Стандарт (6.4.5 Строковые литералы) говорит:
Байт или код нулевого значения добавляется к каждой многобайтовой последовательности символов, которая получается из строкового литерала или литералов.
Итак, строковый литерал "abc\0" содержит неявный нулевой ограничитель, в дополнение к явному. Итак, массив a содержит 5 элементов.