Как добавить пробел для нулевого символа в конце массива символов? - PullRequest
0 голосов
/ 28 февраля 2020

В настоящее время мой массив символов не действует как строка C, что приводит к некоторой плохой памяти, и я предполагаю, что это связано с тем фактом, что у меня нет нулевого \0 в конце этого Мне сказали, что мне нужно «выделить достаточно места», чтобы сделать это, но я предположил, что для этого было «+1» в конце моего объявления о временном интервале.

DNAStrand DNAStrand::operator+(const DNAStrand& other) const {
    char* temp = new char [strlen(bases) + strlen(other) + 1];
    strcat(temp, this->bases);
    strcat(temp, other.bases);
    return temp;
}

1 Ответ

1 голос
/ 28 февраля 2020

Вы должны инициализировать темп после выделения памяти. Один простой способ сделать это при использовании new - это добавить круглые скобки. Для простых старых данных POD будет инициализироваться до 0.

char* temp = new char [strlen(bases) + strlen(other) + 1]();

Если вы не инициализируете временную память, может быть мусор. например, если temp после выделения содержит «ab \ 0d456546 бла-бла». Таким образом, первый strcat примет ab в качестве допустимого значения и начнет добавлять после ab. Это может иметь что угодно.

...