Страницы

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

вторник, 30 октября 2018 г.

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

char digits[] = "0123456789";
printf("%d", sizeof(digits)); Печатает 11, а мне казалось, что должно быть - 10.


Ответ

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

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

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