如何使用malloc函数[C-Programing]将结构复制到指针中



我曾尝试创建一个函数,将结构复制到指针中,但问题是,结构中有一个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;
}

相关内容

  • 没有找到相关文章

最新更新