结构体拷贝

来源:互联网 发布:连拍相机软件 编辑:程序博客网 时间:2024/05/22 16:41

现象:现有三个结构体,分别是结构体A,结构体B,结构体C。三者之间的关系为结构体C中元素包含了结构体A和结构体B。见下:

struct A{int num;char p[4];};struct B{int filesize;int filenum;};struct C{int num;char p[4];int filesize;int filenum;};
在将结构体A和结构体B拷贝到结构体C中出现的问题,直接上源码:

#include <string.h>struct A{int num;char p[4];};struct B{int filesize;int filenum;};struct C{int num;char p[4];int filesize;int filenum;};int main(){A a = {5,"abc"};B b = {100,3};C c = {0,NULL,0,0};memcpy(&c,&a,sizeof(a));memcpy(&c + sizeof(a),&b,sizeof(b)); //错误memset(&c,0,sizeof(c));memcpy((char *)&c,&a,sizeof(a));memcpy((char *)&c + sizeof(a),&b,sizeof(b)); //正确return 0;}

上面,当运行到memcpy(&c + sizeof(a),&b,sizeof(b));时会发现,结构体b并没有被拷贝进结构体c中,查看结构体c的内存信息可以看到,结构体b的信息被拷贝到了另外一个地方去了


原因是因为在进行结构体移动拷贝的时候在进行移动的时候,是按照移动单元的方式来进行移动的,上面memcpy(&c + sizeof(a),&b,sizeof(b));相当于是往结果体c后面移动了sizeof(a)*sizeof(c)的长度,所以出现了拷贝出错的问题。

0 0
原创粉丝点击