我可以在不分配第二个的情况下将一个 char 指针转换为另一个吗?

Can I strcpy a char pointer into another without allocating the second one?

我想将一个 char * 字符串复制到另一个 char * 变量中,因此我将相同的字符串两次存储到这两个 char * 变量中,但它们并不相互依赖,所以如果我对第一个进行 free,我就不会丢失第二个的数据。

我的问题是,我可以只执行 strcpy 而不分配第二个 char * 字符串吗?以下选项是否正确/不正确?

选项 1

//char *string_1 is already allocated and contains a valid string
char *string_2;

strcpy(string_1, string_2);

printf("%s", string_2);

选项 2

//char *string_1 is already allocated and contains a valid string
char *string_2;

string_2 = malloc(((int) strlen(string_1)) * sizeof(char));

strcpy(string_1, string_2);

printf("%s", string_2);

两个选项都应该有

strcpy(string_2, string_1);

而不是

strcpy(string_1, string_2);

两个选项都不正确。

在第一个选项中,没有分配的内存用于复制字符串,指针 string_2 也没有指向这样的内存。

char *string_2;

第二个选项不正确,因为你分配的内存不够。而不是

string_2 = malloc(((int) strlen(string_2)) * sizeof(char));

哪里有错字而不是 strlen( string_2 ) 应该有 strlen( string_1 ) 你至少要写

string_2 = malloc( ( strlen(string_1) + 1 ) * sizeof(char));

或者只是

string_2 = malloc( strlen(string_1) + 1 );