将结构的深层副本复制到nesC中的结构数组(类似于C)

时间:2013-10-31 12:12:44

标签: c struct deep-copy nesc

我试图寻找一个可以帮助我解决问题的答案,但我自己无法解决这个问题。所以这就是它。我在nesC编程,类似于C。

我试图在struct数组的特定位置内制作struct v的深度复制。 struct v定义如下:

struct ip_iovec v = {
  .iov_next = NULL,
  .iov_base = payload,
  .iov_len  = len,
};

其中ip_iovec定义为:

struct ip_iovec {
uint8_t         *iov_base;
size_t           iov_len;
struct ip_iovec *iov_next;
};

为此,我创建了一个相同类型的结构数组:

struct ip_iovec buffer_v[2]; 

现在,我想深入了解我的buffer_v数组的第二个位置。为此我试着做

buffer_v[1] = v;
buffer_v[1].iov_next = v.iov_next;
buffer_v[1].iov_base = v.iov_base;
buffer_v[1].iov_len = v.iov_len;

并尝试了

memcpy(&buffer_v[0], &v, sizeof(struct ip_iovec));

但这些都没有奏效。另外,我想将数值从位置1复制到位置0:

buffer_v[0] = buffer_v[1] (1)

并使用位置0的结构值:

value = &buffer_v[0] (2)

由于在执行(1)和(2)之后调用定义v的函数,其值被重写,这就是我想深入研究它的原因。当我说上面的操作不起作用时我的意思是当v改变时,buffer_v [0]中的值也会改变,如果我要进行正确的深度扫描,这不应该发生。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

“工作”是什么意思?你怎么检查这个?

要复制结构,只需使用赋值,不需要任何幻想:

buffer_v[0] = v;

当然,如果v有指针且您不想复制指针值,即将复制点放在同一数据上,则需要为新数据分配空间并复制数据,太。由于您没有显示struct ip_iovec的实际声明,因此很难提供帮助。