如何使用 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;
}