微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用memcpy和offsetof复制结构的一部分

如何解决使用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 举报,一经查实,本站将立刻删除。