size_t size = 5;
char* str = new char[size];
...
Но когда прохожусь в дебаге, мне показывает, что элементов в моём str не 5, а больше. Пока что это мусор, вот он собственно:
НННННээээЭЭЭЭЭЭЭv h“Э
Вопрос: почему не создаётся массив ровно из 5 символов, а их больше?
Скорее всего просто дебагер не привязывается в переданной длине. Когда дебагер обрабатывает си-строки он ограничивает их только нуль-терминалом. Так же не забываем про выравнивание в памяти
char* разве С-строка? Думал, что только const char* таковой считается
Так какая разница с канстантой или нет ,что то указатель что с канстантой указатель
Просто суть в чём, у меня ещё есть функция len(), которая возвращает кол-во элементов в массиве. Проходит в while указателем, пока не встретит '\0'. И когда я применяю эту функцию у себя, к примеру с тем же массивом str, то показывает длину 22, хотя я как бы просил 5. unsigned len(const char* str) { unsigned count = 0; while (true) { if (*(str + count) == '\0') { return count; } count += 1; } }
Если это происходит до того, как ты записал тула данные - то всё логично, там же мусор. Если после - то ты забыл поставить нуль-терминал в конце. Это твоя обязанность поставить его вручную
Обсуждают сегодня