0

Пишу программу на с++, в классе есть метод, который вычисляет размер выделенной указателем строки в байтах. Поскольку sizeof вычисляет размер только указателя, пришлось сделать так

int size = (strlen(str) + 1) * sizeof(char);//тут размер строки с нуль символом

Собственно сам вопрос, может ли считаться нуль-терминатор за байт? Ведь насколько я знаю, все его биты равны нулю, а значит он не весит ничего, но в строке он присутствует за байт как факт. На разных форумах, объясняют по разному. Развейте плс сомнения.

P.S А так же есть тот факт, что нам приходится выделять под указатель на 1 символ больше, под нуль-символ, т.е мы выделяем еще 1 тип char который весит байт.

Если я не правильно рассуждаю, поправьте пж)

  • Да, в традиционных компьютерах это ровно один байт (8 бит) – avp Mar 08 '18 at 10:03
  • Возможно, но там очень общий случай и его мне не так просто понять, и не описывает мою ситуацию с нуль-символом. В моем же случае вопрос скорее всего такой, нужно ли включать символ-нуль как байт или нет, но так как мне ответили, вполне прояснилось. Я позже переформулирую вопрос по точнее – Глеб Mar 08 '18 at 11:34
  • @Глеб Не воспринимайте закрытие дубликатом негативно, смысл в том, чтобы люди из поисковиков находили путь к подробным ответам по теме. А конкретно по вашему вопросу уже ответили, нуль-терминатор это обычный char, и его размер несомненно нужно включать в размер буфера под строку. – MSDN.WhiteKnight Mar 08 '18 at 11:54
  • Хорошо) Просто изначально я сам пытался найти, но мне в голову не могло прийти, что дубликат-вопрос будет звучать именно так(может просто потому, что у меня частный случай), поэтому в пойске перед заданием вопроса не выдавало ничего. Ну раз дубликат, то окей, вопрос исчерпан) – Глеб Mar 08 '18 at 12:04

1 Answers1

5

Судя по вашему "все его биты равны нулю, а значит он не весит ничего", число 5 - 101 - должно занимать только 2 бита, и только 255 - целый байт, ибо оно равно 11111111...

Величина значения с его размером связаны только в том смысле, что размер определяет диапазон представимых значений. Байт (стандартный, 8-битовый) - это значения от 0 до 255. А какое именно там число - это не играет роли.

Когда вы рассматриваете массив char - то нулевой символ имеет размер этого char, а уж каков его размер в байтах - зависит от конкретной реализации. Говорят, есть машины, где один символ - это целых 4 байта, и там этот нулевой символ - все 4 байта полностью...

Словом, это реальный элемент массива, который представляет строку.

Harry
  • 221,325