#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) на единицу больше количества символов.
Комментариев нет:
Отправить комментарий