memcpy-结构体的复制

memcpy-结构体的复制
⼀、典型例⼦
刘光亭⼀个memcpy的结构体的复制,类似于C++中调⽤类的拷贝构造函数,⽤⼀个对象去初始化另⼀个对象!
终末的佳丽#include "stdio.h"
#include "string.h"
void main(void)
浙江同志
{
struct s1
{
char *name;
int age;
}stu1={"wangqiao",24};
struct s1 s2;
memcpy(&s2,&stu1,sizeof(stu1));
printf("s2.name = %s\ns2.age = %d\n",s2.name,s2.age);
//getch();
黄宾虹画论}
⼆、容易出现的问题
1.涉及到结构体时不要⽤strlen
两个结构体对象a,b都是结构体数组
其中a是已知,b未知
高温工业电视然后⽤memcpy进⾏复制
memcpy(&b,&a,sizeof(a));
cmts之后对a进⾏插⼊处理,结果为a插⼊了⼀个数,b不变;
如果对b进⾏插⼊也是正常的;
但是如果对a或者b的任何⼀个进⾏删除就会使得另外⼀个也被删除,但是主动删除的长度变短,不是主动删除的那个长度不变,只是最后⼀个位置的被重复了。
请⼤⽜们帮忙解答,对于memcpy复制函数具体原理我不懂所以请教,再请问如何才能复制之后两个对象的内存不会相互影响
(memcpy只是单纯把 指定的开始位置的指定内存长度 拷贝到 指定⽬标位置。
如果你结构体⾥有指针什么的, 那个指针就变成共享的。
#也就是指针所指向的 堆内存 是不会拷贝的。
如果这样的话,你只能给类写⼀个拷贝构造函数了
或者重载⼀个 赋值操作符=)
(2) b未知,如果sizeof(a)>sizeof(b)怎么办?这将带来毁灭性的冲击(就像你的程序出现的奇怪现象,或者更厉害⼀些的crash)。
如果不是1那样的情况,a和b是否是pod(plain old data)?pod是c++⽤来兼容c struct的⼀个概念。C++ standard对pod进⾏了细致的描述,可以查阅。同时memcpy是C fun……
3.⽤结构最⼤的问题是结构对齐,

本文发布于:2024-09-24 06:26:18,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/361248.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:复制   结构   内存   删除   长度   出现   对象
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议