c - 结构体变量内的数组成员
问题描述
我的结构如下
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};
这显示语法错误,如何将数据传递给具有数组成员的结构变量?提前致谢。
解决方案
定义变量时可以初始化整个结构:
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;
推荐阅读
- javascript - 在内部数组中查找域值
- c# - 寻找通用日志接口以在 NuGet 包中创建通用日志记录
- node.js - nodejs函数的语法
- angular - 如何从 Observable 获取字符串值
? - android - 如何使用最佳实践在 Android 上创建定时会话?
- python - PHP DOM-Document 和 XPath:获取类数据
- javascript - 即使有 http 错误响应,如何仍然获取 xmlhttprequest 响应文本
- angular7 - 如何在primeng中设置日期范围的值
- python - 在 Python 中训练后,神经网络没有给出预期的输出
- python - 无法在 Mint Linux 上安装 miniconda