【问题标题】:how to pass struct as parameter and memcpy it in C?如何将结构作为参数传递并在C中对其进行memcpy?
【发布时间】:2013-05-27 13:27:28
【问题描述】:

我有以下代码:

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
   int a[3];
} A;

typedef struct
{
   int b;
} B;

typedef struct
{
    A a;
    B b;
} C;

void getC(C *c_p)
{
    C c;
    c.a.a[0] = 1;
    c.b.b = 1;
    memcpy(c_p, &c, sizeof(C));
}

int main()
{
    C *c;
    getC(c);
}

它说进程返回,我真的找不到原因,我认为 memcpy 部分不起作用,有人可以帮忙吗?

【问题讨论】:

  • 您还没有为main 中的c 分配内存来指向。你 memcpying 指向一个未初始化的指针,调用未定义的行为。
  • 为什么进程不返回?这不像你正在做任何可以阻止它返回的事情。

标签: c pointers memcpy


【解决方案1】:

错误出现在您的main 中,您将未初始化的指针传递给getC。你应该让它指向一些东西,像这样:

C c;
getC(&c);

C *c = malloc(sizeof(C));
getC(c);
...
free(c);

此外,您不需要将 memcpystructs 一起使用 - 分配也可以:

void getC(C *c_p)
{
    C c;
    c.a.a[0] = 1;
    c.b.b = 1;
    *c_p = c; // No memcpy
}

【讨论】:

  • +1,如果可以的话,我会添加另一个 +1 来提及结构分配。 :)
猜你喜欢
  • 1970-01-01
  • 2020-12-14
  • 2018-09-10
  • 1970-01-01
  • 2010-12-21
  • 2016-09-02
  • 2018-06-23
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多