⼀、典型例⼦
刘光亭⼀个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.⽤结构最⼤的问题是结构对齐,