繁体   English   中英

在另一个结构中分配结构数组

[英]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];

而不更改任何其他代码,并且可以编译,但是我担心这不是最干净的方法...或者正确的方法...

我感到这个问题是由于我没有完全理解指针,或者在这种情况下看不到它们的使用。

数组不能使用赋值运算符=复制,因此不能将它们赋值给。
采用

  1. 一个for循环:

     for (size_t i = 0; i < sizeof(payload.data) / sizeof(*(payload.data)); ++i) payload.data[i] = rcvd_data[i]; 
  2. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM