Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Откуда берется байт?

#c


char digits[] = "0123456789";

printf("%d", sizeof(digits));

Печатает 11, а мне казалось, что должно быть - 10.    


Ответы

Ответ 1



Строки в C устроены особым образом. Дело в том, что строка в C — это, по сути, простой массив. А массив — это последовательность (в нашем случае) байтов. В нём нигде не хранится длина. Соответственно, чтобы была возможность вычислить длину строки, в конец строки добавляется нулевой байт. Таким образом можно узнать длину строки (так работает функция strlen) — надо пробежаться по массиву до тех пор, пока в нём не встретится нулевой байт (нулевой байт и символ «0» — это не одно и то же!). Встретили нулевой байт — значит, строка закончилась. Проверьте сами. В случае Вашего массива digits[10] == 0. На всякий случай, ещё раз обращаю Ваше внимание на то, что digits[0] == 48. 48 — это ASCII-код символа «0».

Ответ 2



В языках C/С++ строки (в том числе константные) в конце содержат символ с кодом 0, как маркер конца строки. Поэтому sizeof(digits) на единицу больше количества символов.

Комментариев нет:

Отправить комментарий