我试图寻找一个可以帮助我解决问题的答案,但我自己无法解决这个问题。所以这就是它。我在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]中的值也会改变,如果我要进行正确的深度扫描,这不应该发生。
非常感谢您的帮助!
答案 0 :(得分:0)
“工作”是什么意思?你怎么检查这个?
要复制结构,只需使用赋值,不需要任何幻想:
buffer_v[0] = v;
当然,如果v
有指针且您不想复制指针值,即将复制点放在同一数据上,则需要为新数据分配空间并复制数据,太。由于您没有显示struct ip_iovec
的实际声明,因此很难提供帮助。