【问题标题】:How can I concatenate two structs type variables in c++? [closed]如何在 C++ 中连接两个结构类型变量? [关闭]
【发布时间】:2015-08-31 16:28:19
【问题描述】:

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

我有一个结构体和两个结构体**类型的变量。 我声明了第三个结构 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。


[评论更新:]

我的结构都是同一种类型。

【问题讨论】:

  • 完全不清楚您真正想要实现的目标。
  • &C+sizeof(A) 这在 memcpy 中意味着什么?
  • 如果您使用 C++ 编程,为什么要使用 C 标签?为什么要使用mallocmemcpy(例如,如果你有复杂的数据或虚函数,它们可能会做一些不受欢迎的事情)?最后,为什么要指向指针?请尝试创建Minimal, Complete, and Verifiable Example
  • “连接结构”是什么意思?我知道连接字符串“a”+“b”=="ab"。但是里面有任意变量的结构呢?你在搜索数组吗?
  • 您应该选择一种语言。 C 和 C++ 是不同的语言,在内存分配方面更是如此。

标签: c++ c pointers struct memcpy


【解决方案1】:

您已经在某处定义了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;
c.a = a;
c.b = 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<Something, 2>;
C c{a, b};

【讨论】:

  • 我的错,我写了令人困惑的东西。我的结构都是同一类型。我写的结构和一般情况一样。
  • @Andreiasd 我希望这就是您所说的相同类型。显然,您不能在 1 个相同类型的空间中容纳 2 个结构。
【解决方案2】:

[最适合 C]

只使用一个数组。

假设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 */
}

【讨论】:

    【解决方案3】:

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

    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 没有任何机器人原语,伙计,只需单独分配每个字段即可。真的有那么多工作吗?如果您期望这些领域发生很大变化,我想概括它是有意义的。但是这种“聪明的代码”正是那种会在以后咬你的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多