Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        2年前关闭。
                                                                                            
                
        
我有一个struct元素,我想将元素数据(在所有字段中)复制到另一个元素。

所以如果这是结构

struct Node{
  char* name;
  char type;
  char* path;
};


这是我的复制功能:

struct Node Node_cp(struct Node member)
{
  struct Node NewMember;
  NewMember=malloc(sizeof(struct Node))
  //**Here i get error : Assigning to struct Node from incompatible type void* (why ?)**

  NewMember.name=member.name;
  NewMember.type=member.type;
  NewMember.path=member.path;

  return NewMember;
}


-我的问题:


为什么我在malloc上收到此错误?
这是正确的方法吗?我要去
我应该在newMember.path = malloc(sizeof(member.path))上使用malloc
在所有其他领域也是如此?

编辑以解释为什么我的问题与在struct中使用typedef不同的原因,因为系统认为这是一个重复的问题:正如我在C语言中所理解的那样,这是完全不同的问题。我问过关于复制元素而不是在typedef上的问题:


谢谢

最佳答案

malloc返回指向内存中空间的指针。您正在尝试将其分配给非指针类型。 NewMember已经分配了空间(在此功能范围内)。要“修复”它,请更改NewMember的类型。

struct Node * NewMember = malloc(sizeof(struct Node));

旁注:您将希望此函数返回一个指针,或者应将其传递给两个指向struct Node的指针,其中一个参数为src另一个为dest,类似于memcpy的概念。我之所以这样说是因为NewMember离开作用域后,访问返回值是未定义的行为。

函数的后半部分也会遇到问题-请务必对其进行修改,并搜索如何正确地在C语言中复制字符串之类的内容。

10-06 00:49