我有两个字符串,string0
和string1
。 string0
的类型为char *
,而string1
的类型为const char *
。 string1
指向分配在堆上的数据,当释放空间时该数据将变为无效,但是我知道以后需要它的内容。
由于以后会释放内存,因此我无法执行以下操作:
string0 = (char *) string1;
由于这两个都是指针,因此一旦释放内存,它们都将变为无效。这就是为什么我尝试这样做:
strcpy(string0, string1);
但是会产生错误:Segmentation fault (core dumped)
。即使释放了堆,我还能尝试保留string1
的内容吗?
答案 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
。