首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nesC中制作结构到结构数组的深层副本(类似于C)

在nesC中制作结构到结构数组的深层副本(类似于C)
EN

Stack Overflow用户
提问于 2013-10-31 20:12:44
回答 1查看 226关注 0票数 0

我试着寻找一个可以帮助我解决我的问题的答案,但我不能自己解决它。这就是问题所在。我正在用nesC编程,它类似于C。

我正在尝试在结构数组的特定位置内制作struct v的深度副本。struct v的定义如下:

代码语言:javascript
复制
struct ip_iovec v = {
  .iov_next = NULL,
  .iov_base = payload,
  .iov_len  = len,
};

其中,ip_iovec定义为:

代码语言:javascript
复制
struct ip_iovec {
uint8_t         *iov_base;
size_t           iov_len;
struct ip_iovec *iov_next;
};

为此,我创建了一个相同类型的结构数组:

代码语言:javascript
复制
struct ip_iovec buffer_v[2]; 

现在,我想把v深拷贝到我的buffer_v数组的第二个位置。为此,我试着这样做

代码语言:javascript
复制
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;

并且还尝试过

代码语言:javascript
复制
memcpy(&buffer_v[0], &v, sizeof(struct ip_iovec));

但这一切都没有奏效。此外,我想将数组中位置1的值复制到位置0:

代码语言:javascript
复制
buffer_v[0] = buffer_v[1] (1)

并从位置0开始使用struct值:

代码语言:javascript
复制
value = &buffer_v[0] (2)

由于定义v的函数是在执行(1)和(2)之后调用的,它的值被重写,这就是为什么我想要深度复制它的原因。当我说上面的操作不起作用时,我的意思是当v改变时,buffer_v中的值也会改变,如果我要做正确的深度复制,这应该不会发生。

非常感谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2013-10-31 20:15:33

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

要复制结构,只需使用赋值,不需要任何花哨的东西:

代码语言:javascript
复制
buffer_v[0] = v;

当然,如果v有指针,而你不想复制指针值,比如让复制指针指向相同的数据,那么你需要为新数据分配空间,并将数据复制过来。由于您没有显示struct ip_iovec的实际声明,因此很难做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19706234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档