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

时间:2018-09-10 18:56:46

标签: c string pointers

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

由于以后会释放内存,因此我无法执行以下操作:

string0 = (char *) string1;

由于这两个都是指针,因此一旦释放内存,它们都将变为无效。这就是为什么我尝试这样做:

strcpy(string0, string1);

但是会产生错误:Segmentation fault (core dumped)。即使释放了堆,我还能尝试保留string1的内容吗?

1 个答案:

答案 0 :(得分:5)

strcpy不会为您分配内存。在复制任何内容之前,您需要为string0分配足够的内存。不要忘记为终止的空字节再加1。

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

POSIX strdup function为您执行此操作。更安全,更容易理解。

char *string0 = strdup(string1);

或者,如果可能的话,首先不要释放string1