0

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

我正在尝试在结构数组的特定位置内对结构 v 进行深度复制。结构体 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]; 

现在,我想将 v 深度复制到我的 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)

由于定义 v 的函数在 (1) 和 (2) 执行后被调用,因此它的值被重写,这就是我想深度复制它的原因。当我说上述操作不起作用时,我的意思是当 v 发生变化时,buffer_v[0] 中的值也会发生变化,如果我要进行正确的深度复制,则不应该发生这种情况。

非常感谢您的帮助!

4

1 回答 1

0

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

要复制结构,只需使用赋值,无需花哨:

buffer_v[0] = v;

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

于 2013-10-31T12:15:32.520 回答