结构体拷贝
来源:互联网 发布:连拍相机软件 编辑:程序博客网 时间: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
- 结构体拷贝
- 结构体拷贝
- 结构体拷贝
- 结构体对齐,结构体深拷贝和浅拷贝
- cuda结构体数组拷贝
- 结构体中的深浅拷贝
- 结构体知识梳理4-浅拷贝深拷贝
- 结构体中的深拷贝与浅拷贝
- 结构体中的深拷贝和浅拷贝
- 结构体中的浅拷贝与深拷贝
- 结构体对齐和深拷贝浅拷贝
- 结构体拷贝容易出错的地方
- 结构体及其应用:结构体的深度拷贝,结构体内含指针
- swift:类class是浅拷贝 结构体struct是深拷贝(代码理解)
- 结构体拷贝内存 与 #parama pack (1)
- 关于memcpy拷贝结构体、结构体数组到字符数组(字符串)的问题
- 结构的浅拷贝验证
- 如何将一个结构体拷贝到字符数组缓冲区,再原封不动的读出该结构
- 详细的搭建本地YUM服务器(本机与FTP,遇到问题,解决问题详解)
- Cocos2dx中Plugin-X 在android下的整合
- nyoj290动物统计加强版
- 个人感悟2014,10,28
- 如何用fiddler2捕获移动设备上的http或者https请求
- 结构体拷贝
- MYSQL远程登录权限设置
- Effective C++ Item 5 了解 C++ 默默编写并调用哪些函数
- android快速开发框架
- Word Break II
- A+B Problem III
- Remove Element,Remove Duplicates frm Sorted Array I,II(List I,II),Valid Parentheses,ZigZag Conv
- HDU 4411 Arrest 最小费用流
- 易飞9.07衍生字段删除问题