我曾尝试创建一个函数,将结构复制到指针中,但问题是,结构中有一个char
选项卡,我无法将原始值分配给新结构。
功能:
Planete *dupliquer(Planete *p){
Planete *res;
res = (Planete*) malloc(sizeof(Planete));
if(res == NULL){
printf("Erreur d'allocation...n");
exit(1);
}
res->nomplanete = p->nomplanete;
res->rayon = p->rayon;
return res;
}
这是编译器的错误:
error: incompatible types when assigning to type ‘char[20]’ from type ‘char *’
res->nomplanete = p->nomplanete;
^
你能帮帮我吗?那会很好的。感谢您的支持!
看起来nomplanete
不需要单独的malloc
,因为它是一个数组。在这种情况下,您应该使用strcpy
,如下所示:
strcpy(res->nomplanete, p->nomplanete);
如果Planete
的所有成员都是基元或数组,那么您可以简单地memcpy
整个内容,如下所示:
res = malloc(sizeof(Planete)); // No need to cast
if(res == NULL){
printf("Erreur d'allocation...n");
exit(1);
}
memcpy(res, p, sizeof(Planete));
如果nomplanete
是一个指针,则必须执行单独的malloc
或使用strdup
:
res->nomplanete = malloc(1+strlen(p->nomplanete));
strcpy(res->nomplanete, p->nomplanete);
"nomplanete"似乎是"Planete"结构的字符数组成员。在这种情况下,只需将函数写成:
Planete* dupliquer (const Planete* p)
{
Planete* res;
res = malloc(sizeof(Planete));
if(res == NULL){
printf("Erreur d'allocation...n");
exit(1);
}
memcpy(res, p, sizeof(Planete));
return res;
}