C 此代码正确吗?还是必须先分配名称,然后才能使其等于name2

C 此代码正确吗?还是必须先分配名称,然后才能使其等于name2,c,C,char*是指向内存位置的指针。 因此,当您使用name=name2时,c所做的只是两者现在引用相同的内存位置。char*是指向内存位置的指针。 因此,当您使用name=name2时,c所做的只是两者现在引用相同的内存位置。两个指针变量*name和*name2都指向分配的相同内存。当您释放该内存时,两个变量都不会指向有效的内存分配就足够了。@Temaniaf如果我更喜欢sizeof(*name2)如果您想name和name2指向同一字符串的不同副本,那么您需要将name与name2分开分配(以及

char*是指向内存位置的指针。
因此,当您使用name=name2时,c所做的只是两者现在引用相同的内存位置。

char*是指向内存位置的指针。
因此,当您使用name=name2时,c所做的只是两者现在引用相同的内存位置。

两个指针变量
*name
*name2
都指向分配的相同内存。当您
释放该内存时,两个变量都不会指向有效的内存分配
就足够了。@Temaniaf如果我更喜欢
sizeof(*name2)
如果您想
name
name2
指向同一字符串的不同副本,那么您需要将
name
name2
分开分配(以及以后的免费分配)。您可以使用
strcpy()
将字符串复制到
name2
,然后使用
strcpy()
将字符串复制到
name
。但就目前情况而言,只要你不认为字符串是被赋值复制的,你就可以了。仅更改了
name
中的指针值;没有发生其他复制。@TemaniAfif
name2=malloc(sizeof*name2*100)
更易于正确编码、查看和维护。两个指针变量
*name
*name2
都指向分配的相同内存。当您
释放该内存时,两个变量都不会指向有效的内存分配
就足够了。@Temaniaf如果我更喜欢
sizeof(*name2)
如果您想
name
name2
指向同一字符串的不同副本,那么您需要将
name
name2
分开分配(以及以后的免费分配)。您可以使用
strcpy()
将字符串复制到
name2
,然后使用
strcpy()
将字符串复制到
name
。但就目前情况而言,只要你不认为字符串是被赋值复制的,你就可以了。仅更改了
name
中的指针值;没有发生其他复制。@TemaniAfif
name2=malloc(sizeof*name2*100)
更易于正确编码、检查和维护。
char * name = NULL;
char * name2 = (char*)malloc(100*sizeof(char));

name = name2;