gpt4 book ai didi

c - 在 nesC 中将结构体深度复制到结构体数组(类似于 C)

转载 作者:行者123 更新时间:2023-11-30 17:45:12 25 4
gpt4 key购买 nike

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

我正在尝试在结构数组的特定位置内制作结构 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] 中的值也会更改,如果我要执行正确的深度复制,则不应发生这种情况。

非常感谢您的帮助!

最佳答案

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

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

buffer_v[0] = v;

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com