如何保留以后销毁的字符串的内容?

Han*_*lon 0 c string pointers

我有两个字符串,string0string1.string0是类型char *string1为类型const char *.string1指向是在堆上分配当空间被释放变为无效,但我知道我以后会需要它的内容的数据.

由于以后释放内存,我不能执行以下操作:

string0 = (char *) string1;
Run Code Online (Sandbox Code Playgroud)

由于这两个都是指针,因此一旦释放内存,它们都将变为无效.这就是我尝试这个的原因:

strcpy(string0, string1);
Run Code Online (Sandbox Code Playgroud)

但这会产生错误:Segmentation fault (core dumped).string1即使在释放堆之后,我还能尝试保留其他内容吗?

Sch*_*ern 5

strcpy没有为你分配内存.string0在将任何内容复制到其中之前,您需要分配足够的内存.不要忘记终止空字节还有1个.

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

POSIX strdup功能可以实现这个要求.它更安全,更容易理解.

char *string0 = strdup(string1);
Run Code Online (Sandbox Code Playgroud)

或者,如果可能的话,string1首先不要自由.