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