C语言,请问如何将结构体中的结构体拷贝到内存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言,请问如何将结构体中的结构体拷贝到内存相关的知识,希望对你有一定的参考价值。

问题是这样的,比如结构体B是嵌套在结构体A中的,我用memcpy将A拷贝到内存,但是发现A.B的内容没有被拷贝进去,请问如何解决

1、可以直接用=符号拷贝,但它有一个条件,这里的赋初值不别的数据类型(如 int a;a=5;)它必须是对结构体中的每个成员以此赋值的。将一个结构体变量的值直接赋给另外一个结构体变量的时候,这两个结构体必须是相同结构体名。

2、不同类型的话,也可以用,一般在做通信方面用的比较多。因为处理协议。发包方按照某个协议结构体填充后,发送;接收方收到时其实是一个很长的字符串。那接收方一般用这种方法:结构体 = (结构体)&字符串, 当然接收方的结构体跟发送方的结构体不一定一样,都是根据协议来的。
参考技术A 不会的,在实例化A的时候会把A中的属于B部分的一起申请内存
你是通过什么方法来发现A.b没有拷贝进去的?
有代码最好贴出来,大家可以一起分析。
你这样直接说结果别人也没办法的本回答被提问者和网友采纳
参考技术B 你把指向结构体的指针拷贝到内存就可以了。 参考技术C 这不可能啊,能不能把两个结构体的定义贴上来看看?

C语言中如何将结构体中的值赋给BYTE类型的缓存?

BYTE test1[1024*100]

typedef struct

DWORD TASK1;
WORD TASK2;
WORD TASK3;
STU

struct tttt

STU STUDENT[80];
STU STUDENT2[80];

如题,需要将TTTT中的两个数组里的值依次赋值到test1里,具体要怎么写呢?

C语言中将结构体给BYTE缓存赋值时,直接进行拷贝即可。

结构体在内存中是一段连续的内存空间,BYTE缓存(即BYTE数组)也是一段连续的内存空间,直接进行内存拷贝就可以完成赋值操作。

例如:

struct A 
    int a;
    short b;
 dataStruct;
BYTE dataBuffer[20];
memcpy(dataBuffer, dataStruct, sizeof(struct A)); //对Byte缓存赋值
memcpy(dataStruct, dataBuffer, sizeof(struct A)); //对结构体赋值

参考技术A void *memcpy(void *dest, const void *src, size_t n);
从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

memcpy(&test1, &TTTT, sizeof(TTTT))本回答被提问者采纳

以上是关于C语言,请问如何将结构体中的结构体拷贝到内存的主要内容,如果未能解决你的问题,请参考以下文章

C语言中如何将结构体中的值赋给BYTE类型的缓存?

C 语言结构体 ( 结构体深拷贝 )

C 语言结构体 ( 结构体浅拷贝 )

C语言怎么将结构体的内容复制到另一个结构体中

c语言中如何将按结构体中的某个元素大小,将结构体排序输出

用c语言给结构体中的元素排序