gpt4 book ai didi

c - 将结构体中的数组分配给带有数组的新结构体

转载 作者:行者123 更新时间:2023-11-30 14:48:02 24 4
gpt4 key购买 nike

所以我有一个内部有数组的结构,如下所示:

struct struct1 {
unsigned char data1[32];
unsigned char data2[32];
char *id;
};

第二个结构体定义为

typedef struct
{
uint8_t id;
uint8_t data1[32];
uint8_t data2[32];
} struct2;

Struct1 中已有数据,通过如下函数传递给我:

bool func1(struct struct1 * const struct1)

我需要创建一个新的 struct2 并将 struct1 中的所有数据传递到其中。

我想我可以像这样分配指针

struct2 *new_struct;

new_struct->id = struct1->id;
new_struct->data1 = struct1->data1;
new_struct->data2 = struct1->data2;

但我猜想 C 中的数组指针不能更改(或者至少这是我从阅读中得到的结果)。

那么如何创建一个新的 struct2 并将我需要的数据从 struct1 传递到其中?

最佳答案

array pointers in C cannot be changed

不存在“数组指针”这样的东西。要么有一个数组,要么有一个指针。

就您而言data1data2是数组,因此没有可以重新分配的指针。您唯一的选择是将数组中存储的数据从一个结构复制到另一个结构。

您可以在相同类型的结构变量之间使用简单赋值( = ),但在您的情况下,您有不同的类型,因此您需要单独复制每个成员。最简单的方法是使用 memcpy (来自<string.h>)。

#include <string.h>

// ...
struct2 new_struct;

new_struct.id = *struct1->id;
memcpy(new_struct.data1, struct1->data1, sizeof new_struct.data1);
memcpy(new_struct.data2, struct1->data2, sizeof new_struct.data2);

注释:

  • new_struct这里不是指针。在您的示例中,您取消引用未初始化的指针,该指针具有未定义的行为。
  • 我取消引用 struct1->id因为struct2.id是单char ,不是指针。我想这就是您想要发生的事情。

关于c - 将结构体中的数组分配给带有数组的新结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50789735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com