如何用C语言复制struct数据?

时间:2012-08-06 08:22:35

标签: c pointers struct copy

我仍然无法理解如何复制包含char * fields \ other struct fields的结构:

typedef struct node{
   int id;
   struct node* parent
   char * nodeName;
   struct node* nodes[100];
 }NODE,*pNODE;

我想使用此功能:pNODE copyNode(pNODE oldNode) 1.我知道首先应该为新的指针数据进行分配,然后执行以下操作:

pNODE newNode = (pNODE)calloc(1,sizeof(NODE));
newNode.id=oldNode.id
//for the string that I want to copy I should allocate and use strcpy - in order not to point at the same string

但是现在我对父节点感到迷茫,我该怎么复制呢?如果我这样做:newNode.parent=oldNode.parent 我指向同一个父对象,如果我改变它的Id例如 - 它将改变newNode和oldNode的id。我怎么才能复制它?没有指向同一个? 以及如何复制指针数组??

谢谢你!

1 个答案:

答案 0 :(得分:1)

看一下memcopy功能:

memcpy(oldNode.parent, newNode.parent, sizeof(node)).

当然,首先需要使用malloc为newNode的父级分配内存(calloc在这种情况下没有意义 - 它用于数组)

newNode.parent = (NODE*)malloc(sizeof(NODE))

如果要进行深层复制(即不重用引用的对象),则应该检查newNode结构并为结构中包含的每个指针分配内存,然后应用memcopy。