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

Почему размер байта строки длиннее длины?

Почему это sizeof("Bill") есть 5, но sizeof(char) есть 1?

Не следует ли sizeof("Bill") быть 4, так как длина строки равна 4 символам (4 x 1)?

Я полагаю, что это может иметь отношение к "Bill", являющемуся массивом символов, но почему это увеличивает размер байта?

4b9b3361

Ответ 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', без нуль-терминатора.

Ответ 2

он имеет 0 как символ терминатора, поэтому его B i l l 0