如何使用 malloc 函数将结构复制到指针中 [C 编程]
How to duplicate a structure into a pointer with malloc function [C-Programming]
我试图创建一个将结构复制到指针中的函数,但问题是,结构中有一个 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;
}
我试图创建一个将结构复制到指针中的函数,但问题是,结构中有一个 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;
}