`
linger_yan
  • 浏览: 48048 次
  • 性别: Icon_minigender_1
  • 来自: 烟台
社区版块
存档分类

C++中具有相同内部结构的结构体,可以通过内存拷贝的形式进行复制。

    博客分类:
  • C++
阅读更多
今天工作中遇到一个问题,需要进行结构体的复制操作,但是两个结构体的内部结构是完全,只是结构体和结构体内部的命名不一致而已。
一开始想到的肯定是每个字段进行赋值的方法(那个交易的结构体将近二十个字段呢!)。
可回来一想,两个结构体内部结构完全一致,在内存中的存储也应该是一致的,这样是否可以通过内存复制的方式进行结构体的复制,刚才试了试,果然可以。
(如果是两个程序之间进行这样的操作,必须保证结构体的对其方式是完全一致的)

下面是两个结构体声明的代码:

typedef struct 
{
	char		cSequenceNo[12+1];		
	char		cTotalFee[12+1];
	char		cTest;
	int			iTest;
	char		cOperaotrId[4+1];		
	char		cTimeOut[4+1];	
} ReadCard; 

typedef struct 
{
	char		test1[12+1];
	char		test2[12+1];
	char		cTest;
	int			iTest;
	char		test4[4+1];	
	char		test5[4+1];	
} test; 


下面是测试的代码:

	ReadCard readCard;
	memset(&readCard, 0x00, sizeof(ReadCard));
	
	strcat(readCard.cSequenceNo, "cSequenceNo");
	strcat(readCard.cTotalFee, "cTotalFee");
	strcat(readCard.cOperaotrId, "test");
	strcat(readCard.cTimeOut, "1024");
	readCard.cTest = 'q';
	readCard.iTest = 123;
	
	
	test test1;
	memset(&test1, 0x00, sizeof(test));
	memcpy(&test1, &readCard, sizeof(ReadCard));//就用这么一句就搞定了,呵呵
分享到:
评论

相关推荐

    C/C++ 浅拷贝和深拷贝的实例详解

    深拷贝是指拷贝对象的具体内容,而内存地址是自主分配的,拷贝结束之后,两个对象虽然存的值是相同的,但是内存地址不一样,两个对象也互不影响,互不干涉。 浅拷贝就是对内存地址的复制,让目标对象指针和源对象...

    深入C++拷贝构造函数的总结详解

    拷贝构造函数是C++最基础的概念之一,大家自认为对拷贝构造函数了解么?请大家先回答一下三个问题:1. 以下函数哪个是拷贝构造函数,为什么?X::X(const X&); X::X(X); X::X(X&, int a=1); X::X(X&, int a=1, b=2);...

    C++程序设计代码

    2.定义一个表示时间的结构体,可以精确的表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。 实验二 函数的应用(2学时) 1.编写重载函数Max1,分别求出两个整数,...

    77G 22套C语言 C++ 数据结构 程序设计视频课程合集 C丨C++相关学习视频全套视频教程

    dk2j_c_main参数和文件复制.mp4 dk2j_c_malloc.mp4 dk2j_c_realloc.mp4 dk2j_c_全局变量.mp4 dk2j_c_关系运算和逻辑运算.mp4 dk2j_c_函数的存储分类.mp4 dk2j_c_变量.mp4 dk2j_c_字符IO.mp4 dk2j_c_字符串...

    C++程序设计实验指导书

    C++课程实验指导书 目 录 第一部分 VC++开发环境 1 一、Visual C++6.0开发环境简介 1 二、控制台应用程序的创建 5 三、程序调试 9 第二部分 C++实验项目 14 实验一 基本数据类型与输入输出 14 实验二 表达式和语句 ...

    c++面试题基础分享.doc

    c++面试题53个问题 1.C++的三大特性 2.C和C++的区别 3.全局变量和局部变量在内存分配上有何不同 4.static的作用 5.const解释其作用 6.指针和引用的区别 7.智能指针 8.简述深拷贝和浅拷贝的区别 9.编写my_...

    C/C++程序员面试指南.杨国祥(带详细书签).pdf

    面试题13:char型数据在内存中的存储形式 3.4 运算符 面试题14:请写出下列代码的输出内容 面试题15:运算符的优先级问题 面试题16:&&和&,||和|有什么区别 面试题17:什么是左值,什么是右值 面试题18:请写出程序...

    C++反汇编视频教程(代码+课件+视频全套价值300元的付费教程)

    价值500元的C++反汇编收费课程:课程介绍 本套课程主要探讨如何读懂 C/C++ 语言程序的反汇编代码。所谓反汇编,简单的讲就是把可执行文件的二进制编码翻译成汇编语言代码,从汇编代码中读懂原高级语言的含义。这是...

    C++11unique-ptr智能指针详解.pdf

    operator->() 重载 -> 号,当智能指针指向的数据类型为⾃定义的结构体时,通过 -> 运算符可以获取其内部的指定成员。 operator =() 重载了 = 赋值号,从⽽可以将 nullptr 或者⼀个右值 unique_ptr 指针直接赋值给...

    C++智能指针-unique-ptr智能指针详解.pdf

    3) 基于 unique_ptr 类型指针不共享各⾃拥有的堆内存,因此 C++11 标准中的 unique_ptr 模板类没有提供拷贝构造函数,只提供 了移动构造函数。例如: 1. std::unique_ptr<int> p4(new int); 2. std::unique_ptr...

    C++11unique-ptr智能指针详解(1).pdf

    operator->() 重载 -> 号,当智能指针指向的数据类型为⾃定义的结构体时,通过 -> 运算符可以获取其内部的指定成员。 operator =() 重载了 = 赋值号,从⽽可以将 nullptr 或者⼀个右值 unique_ptr 指针直接赋值给...

    将4名同学的信息写入磁盘文件并保存(附带拷贝一份)

    通过结构体将四个同学的有关信息输入,把它们保存到磁盘文件里,并且拷贝一份。

    长春理工大学计算机c++实验课题目及程序

    3-求和排序 4-结构体与参数默认 5-编写student类 6-深拷贝 7-多继承 8-运算符重载

    c++音像店数据管理系统

    设计一个利用文件处理方式实现音像店的程序,具有增加数据、更新数据、查询数据、删除数据、租出影碟、归还影碟以及重组文件的功能,删除数据在记录中作删除标志,重组文件指在物理上删除作有删除标志的记录....

    c++计算一个立方体盒子体积

    ④ 定义一个拷贝构造函数,使得可以通过一个对象(例如box1)来初始化另一个新对象(例如box2),新对象的数据成员length、width、height的大小为原对象的一半; ⑤ 设计main()测试函数,并准备好合适的测试数据。 (3)...

    xlsx读写库xlsxio的编译及简单策划配置表的c++读取封装

    xlsxio的读写简单c++封装,用于读写策划配置表等 首先要配置cygwin环境 然后安装一下gcc g++ vim gdb make cmake minizip libzip2等,根据需要 然后从cygwin里进入解压出来的libexpat文件夹,用 cmake . && make ...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

    SNL语言编译器安装包(内含VC6.0源代码及SNL语言例子)

    这门语言主要特点是支持过程的嵌套声明,支持纪录(类似于C中的结构体),支持数组类型,支持字符类型,支持无符号整数类型。有基本的条件判断语句,循环语句。对于过程而言,定义了传址类型的参数(类似于C++的引用...

    代码语法错误分析工具pclint8.0

    2.通常一个VC项目中包含多个C或C++文件,有时需要同时对这一系列的文件进行lint检查,我们可以通过配置一个pclint_project来达到目的。 和前面第一步中的方法基本一样,不过这里我们需要用到unix中的find等命令来...

    google C++ 风格指南 - 中文版

    3.5. 结构体 VS. 类 3.6. 继承 3.7. 多重继承 3.8. 接口 3.9. 运算符重载 3.10. 存取控制 3.11. 声明顺序 3.12. 编写简短函数 译者 (YuleFox) 笔记 4. 来自 Google 的奇技 4.1. 智能指针 4.2. cpplint 5....

Global site tag (gtag.js) - Google Analytics