我试图寻找可以帮助我解决问题的答案,但我自己却无法解决。所以就到这里。我在与C相似的nesC中编程。

我正在尝试在struct数组的特定位置内复制struct 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数组:

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]中的值也会更改,如果我要进行正确的深度复制,则不应该发生这种情况。

非常感谢您的帮助!

最佳答案

“工作”是什么意思?您如何检查?

要复制结构,只需使用分配即可,无需花哨:

buffer_v[0] = v;


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

关于c - 将结构深层复制到nesC中的结构数组(类似于C),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19706234/

10-11 22:50
查看更多