如何在c ++中连接两个结构类型变量?

我一直试图将一些struct(我定义的)类型变量连接成一个更大的变量。 我得到的基本上是这样的:

我有一个struct和两个struct **类型的变量。 我声明第三个结构C,我想将A和B连接成C.我尝试的是这样的(我现在没有代码在我面前所以我会写一些与某些名字非常相似的东西改变,因为我不记得他们。

struct** A, B; struct** C; 

(我知道A和B,因为我通过调用另一个函数接收它们)

我像这样为C分配内存。

 C = (struct**)malloc(sizeof(A)+sizeof(B)); 

我用这样的memcpy移动A和B.

 memcpy(&C, &A, sizeof(A)); memcpy(&C + sizeof(A), &C, sizeof(B)); 

显而易见的是,我所做的并不正确,因为看起来所有这些C只包含A.我很确定问题来自“**”,我无法处理好指针的指针。 有人可以就我的问题给我一些建议吗? 我也不想使用Handles,我必须使用memcpy / memmove。


[评论更新:]

我的结构都是相同的类型。

你已经有了一个struct A a;struct B b; 在某处定义。 要将它们连接成struct C请执行以下操作:

 struct A a; struct B b; struct C{ struct A a; struct B b; }; struct C c; ca = a; cb = b; 

无需指针或memcpy

编辑:由于ab属于同一类型,你可以稍微缩短它:

 struct Something a, b; struct C{ struct Something[2]; }; struct C c; c[0] = a; c[1] = b; 

在C ++中你会做这样的事情:

 using C = std::array; C c{a, b}; 

只需使用一个数组。

假设struct A在堆栈上定义了一个数组

 struct A a1 = {...}; /* some initialisation here */ struct A a2 = {...}; /* more initialisation here */ struct A a[2]; a[0] = a1; a[1] = a2; 

或动态分配:

 struct A * pa = malloc(2 * sizeof *pa); if (NULL != pa) { pa[0] = a1; pa[1] = a2; /* use pa */ free(pa); } else { /* handle malloc error */ } 

好吧,首先,您的代码有一个错误:

 memcpy(&C, &A, sizeof(A)); memcpy(&C + sizeof(A), &C, sizeof(B)); 

应该是

 memcpy(&C, &A, sizeof(A)); memcpy(&C + sizeof(A), &B, sizeof(B)); 

你把C复制回C而不是B.

其次,如果你发现自己玩这样的指针,你可能会遇到一个设计问题。 如果你真的想要将两个结构合并在一起,为什么结构C只包含结构A和B?

如果您真的希望struct C没有任何bot原语,那么,只需要分别为每个字段分配工作。 真的那么多工作吗? 如果您希望这些字段发生很大变化,我想将它概括为一般是有道理的。 但是这种“聪明的代码”就是确切的东西,它会让你在后来的屁股中咬你。