如何解决使用memcpy和offsetof复制结构的一部分
我想通过结合offsetof
宏和memcpy
,从某个元素开始复制结构的一部分,如下所示:
#include <stdio.h>
#include <string.h>
#include <stddef.h>
struct test {
int x,y,z;
};
int main() {
struct test a = { 1,2,3 };
struct test b = { 4,5,6 };
const size_t yOffset = offsetof(struct test,y);
memcpy(&b + yOffset,&a + yOffset,sizeof(struct test) - yOffset);
printf("%d ",b.x);
printf("%d ",b.y);
printf("%d",b.z);
return 0;
}
我希望它输出4 2 3
,但实际上输出4 5 6
,就好像没有进行复制一样。我怎么了?
解决方法
您正在对错误类型的指针进行指针算术运算,并且正在向栈中的某些随机存储器中写入数据。
由于要计算字节偏移量,因此必须使用指向字符类型的指针。例如
memcpy((char *)&b + yOffset,(const char *)&a + yOffset,sizeof(struct test) - yOffset);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。