[英]Assigning an array of structs in another sruct
我有以下代码:
struct sensor_data{
uint8_t data_type;
signed int data_left;
uint8_t data_right;
};
struct sensor_payload{
uint16_t key, id, type;
uint8_t fields;
struct sensor_data data[4];
bool valid;
};
如您所见, struct sensor_payload
有一个struct sensor_data[4]
。 基本上,一个结构中的一个结构数组。
当我尝试分配它时:
uint16_t rcvd_key = (buf[0] << 8) | buf[1];
uint16_t rcvd_id = (buf[2] << 8) | buf[3];
uint16_t rcvd_type = (buf[4] << 8) | buf[5];
uint8_t rcvd_fields = buf[6];
struct sensor_data rcvd_data[4];
while(i <= (rcvd_fields)){
rcvd_data[i].data_type = buf[j+7];
rcvd_data[i].data_left = buf[j+8];
rcvd_data[i].data_right = buf[j+9];
i++;
j = j + 3;
}
struct sensor_payload payload;
payload.key = rcvd_key;
payload.id = rcvd_id;
payload.type = rcvd_type;
payload.data = rcvd_data; <<LINE WITH ERROR
payload.valid = true;
我得到: assignment to expression with array type
甚至不确定错误是什么意思...
我尝试了这个:
payload.data[0] = rcvd_data[0];
而不更改任何其他代码,并且可以编译,但是我担心这不是最干净的方法...或者正确的方法...
我感到这个问题是由于我没有完全理解指针,或者在这种情况下看不到它们的使用。
数组不能使用赋值运算符=
复制,因此不能将它们赋值给。
采用
一个for
循环:
for (size_t i = 0; i < sizeof(payload.data) / sizeof(*(payload.data)); ++i) payload.data[i] = rcvd_data[i];
或memcpy
:
memcpy(payload.data, rcvd_data, sizeof(payload.data));
代替。
您可以节省一些时间和麻烦,但可以将数据直接写入有效负载结构中,如下所示
struct sensor_payload payload;
payload.key = (buf[0] << 8) | buf[1];
payload.id = (buf[2] << 8) | buf[3];
payload.type = (buf[4] << 8) | buf[5];
payload.fields = buf[6];
j = 7;
for ( i = 0; i < 4 && i < payload.fields; i++ )
{
payload.data[i].data_type = buf[j++];
payload.data[i].data_left = buf[j++];
payload.data[i].data_right = buf[j++];
}
payload.valid = true;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.