首页 > 解决方案 > 结构体变量内的数组成员

问题描述

我的结构如下

typedef struct s_CanMsg
{
    uint32_t id;
    uint16_t timestamp;
    uint8_t  data[8];
    uint8_t  dlc;
    bool_t   isExtended;
    bool_t   isRemote;
} s_CanMsg_t;

我有一个结构变量如下

 s_CanMsg_t CANEraseResponse;

现在我试图将一个数组传递给结构变量的数据成员,如下所示:

CANEraseResponse.data[8] = {0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00};

这显示语法错误,如何将数据传递给具有数组成员的结构变量?提前致谢。

标签: carrays

解决方案


定义变量时可以初始化整个结构:

s_CanMsg_t CANEraseResponse = {
    some_value_for_id,
    some_value_for_timestamp,
    {0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00},
    some_value_for_dlc,
    some_value_for_isExtended,
    some_value_for_isRemote
};

您还可以使用指示符仅显式初始化数组成员;

s_CanMsg_t CANEraseResponse = {
    .data = {0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00}
};

然后所有其他成员将被初始化为零。

当然,您可以定义一个临时数组并复制到结构数组中:

static uint8_t data[8] = {0x00, 0xFF, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00},

s_CanMsg_t CANEraseResponse;
memcpy(CANEraseResponse.data, data, sizeof data);

最后,如果上述方法都不可接受,那么唯一剩下的解决方案是显式分配给数组的每个元素:

CANEraseResponse.data[0] = 0x00;
CANEraseResponse.data[1] = 0xFF;
CANEraseResponse.data[2] = 0x00;
CANEraseResponse.data[3] = 0x04;
CANEraseResponse.data[4] = 0x02;
CANEraseResponse.data[5] = 0x00;
CANEraseResponse.data[6] = 0x00;
CANEraseResponse.data[7] = 0x00;

推荐阅读