Как сохранить содержимое строки, которая будет уничтожена позже? - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть две строки, string0 и string1. string0 имеет тип char *, а string1 имеет тип const char *. string1 указывает на данные, размещенные в куче, которые становятся недействительными при освобождении пространства, но я знаю, что их содержимое мне понадобится позже.

Поскольку память освобождается позже, я не могу сделать следующее:

string0 = (char *) string1;

Поскольку оба они являются указателями, после освобождения памяти они становятся недействительными. Вот почему я попробовал это:

strcpy(string0, string1);

Но это приводит к ошибке: Segmentation fault (core dumped). Что еще можно попытаться сохранить содержимое string1 даже после освобождения кучи?

1 Ответ

0 голосов
/ 10 сентября 2018

strcpy не выделяет память для вас.Вам нужно выделить достаточно памяти для string0, прежде чем что-либо копировать в нее.Не забудьте еще 1 для завершающего нулевого байта.

// No size is needed because `char` is always 1 byte
char *string0 = malloc( strlen(string1) + 1 );
strcpy( string0, string1 );

Функция POSIX strdup сделает это за вас.Это безопаснее и проще для понимания.

char *string0 = strdup(string1);

Или, если возможно, просто не освобождайте string1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...