【问题标题】:Making a deep-copy of a struct to a struct array in nesC (similar to C)在nesC中将结构深拷贝到结构数组(类似于C)
【发布时间】:2013-10-31 12:12:44
【问题描述】:

我试图寻找一个可以帮助我解决问题的答案,但我自己无法真正解决它。就这样吧。我正在用类似于 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] 中的值也会发生变化,如果我要进行正确的深度复制,则不应该发生这种情况。

非常感谢您的帮助!

【问题讨论】:

  • 这不是一个结构声明,它是一个名为v的变量的声明和初始化。

标签: c struct deep-copy nesc


【解决方案1】:

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

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

buffer_v[0] = v;

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

【讨论】:

  • 感谢 cmets。我只是在原始帖子中添加了 ip_iovec 的定义。当我说上述操作不起作用时,我的意思是当 v 发生变化时,buffer_v[0] 中的值也会发生变化,如果我会做正确的深度复制,这不应该发生吗?
猜你喜欢
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 2012-07-05
  • 1970-01-01
  • 2011-01-14
  • 1970-01-01
相关资源
最近更新 更多