我试着寻找一个可以帮助我解决我的问题的答案,但我不能自己解决它。这就是问题所在。我正在用nesC编程,它类似于C。
我正在尝试在结构数组的特定位置内制作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]; 现在,我想把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开始使用struct值:
value = &buffer_v[0] (2)由于定义v的函数是在执行(1)和(2)之后调用的,它的值被重写,这就是为什么我想要深度复制它的原因。当我说上面的操作不起作用时,我的意思是当v改变时,buffer_v中的值也会改变,如果我要做正确的深度复制,这应该不会发生。
非常感谢你的帮助!
发布于 2013-10-31 20:15:33
你说的“工作”是什么意思?你怎么检查这个?
要复制结构,只需使用赋值,不需要任何花哨的东西:
buffer_v[0] = v;当然,如果v有指针,而你不想复制指针值,比如让复制指针指向相同的数据,那么你需要为新数据分配空间,并将数据复制过来。由于您没有显示struct ip_iovec的实际声明,因此很难做到这一点。
https://stackoverflow.com/questions/19706234
复制相似问题