Я пишу простую функцию для слияния двух C-строк. При попытке динамически alocate нового блока памяти я узнал, что:Новое выделяет слишком много памяти
char * out = new char[size];
std::cout << strlen(out) <<std::endl;
Возвращает 16, когда размер 4 и 40, когда размер 22 и так далее. У кого-нибудь есть идея, почему он действует так и как распределять память для c-строки с определенным количеством символов?
Вы не инициализируете строку. 'strlen()' нуждается в 0-концевом буфере. Спрошено столько раз ... –
Yup - как только я вижу strlen() в вопросе .... –
Непонятно, что это дубликат предлагаемого оригинала. Этот вопрос касался применения 'strlen' к массиву, который был инициализирован, но который не содержал завершающий нулевой символ. Этот вопрос применяет 'strlen' к массиву, который не инициализирован. Непонятно, возникает ли путаница в отношении того, как работает «strlen» или о том, инициализирует ли и как «новый» массив, выделенный таким образом. –