Ответ 1
СтрокиC имеют нулевое завершение. В конце этой строки находится нулевой байт. Предполагая, что ASCII, "Bill"
выглядит следующим образом:
'B' 'i' 'l' 'l' '\0'
0x42 0x69 0x6c 0x6c 0x00
Из стандарта C раздел 6.4.5 Строковые литералы, пункт 7:
В фазе 7 перевода байт или код нулевого значения добавляется к каждой многобайтовой последовательности символов, которая получается из строкового литерала или литералов.
Если вы хотите получить ответ 4
для длины, вы должны использовать strlen("Bill")
, а не sizeof
.
Если вам действительно не нужен нулевой ограничитель, это тоже возможно, хотя, вероятно, не рекомендуется. Это определение:
char bill[4] = "Bill";
даст 4-байтовый массив bill
, содержащий только символы 'B'
, 'i'
, 'l'
и 'l'
, без нуль-терминатора.