将Struct中的数组分配给带有数组的新Struct

时间:2018-06-11 02:17:12

标签: c arrays struct

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

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传递我需要的数据?

1 个答案:

答案 0 :(得分:1)

  

C中的数组指针无法更改

没有“数组指针”这样的东西。你有一个数组,或者你有一个指针。

在您的情况下2018-04-16data1是数组,因此没有指针可以重新分配。您唯一的选择是将存储在数组中的数据从一个结构复制到另一个结构。

您可以在相同类型的struct变量之间使用简单赋值(data2),但在您的情况下,您有不同的类型,因此您需要单独复制每个成员。最简单的方法是使用=(来自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,而不是指针。我认为这就是你想要发生的事情。