我需要将数据写入一个结构,其中数据的长度取决于我要发送到设备的命令。为此,我定义了以下结构:
typedef struct {
uint8 len; // Command length (cmd ... crc)
uint8 cmd; // Command code
uint8 data_length; // Data length
uint8 data[12]; // Data: max 12 Byte
uint8 crc_h; // CRC value MSB
uint8 crc_l; // CRC value LSB
}CMD_TYPE;
注意:成员cmd、 *data_length* 和crc始终存在,而成员数据可以为空或最多包含 12 个字节。
我创建了一个函数,它根据传递给函数的参数返回一个初始化的命令:
CMD_TYPE Device::get_cmd(uint8 cmd, uint8 data_len, uint8 *data)
{
CMD_TYPE cmd;
cmd.len = (4 + data_len) * sizeof(uint8);
cmd.cmd = cmd;
cmd.data_length = data_len;
cmd.data = (uint8 *)realloc(cmd.data, data_len*sizeof(uint8));
if(data_len > 0) memcpy(cmd.data, data, data_len);
add_crc16((uint8*)&cmd);
return cmd;
}
函数 get_cmd() 的使用如下:
uint8 cmd_code = 0x01;
uint8 data[2] = {0xAB, 0xCD};
CMD_TYPE cmd = local_device->get_cmd(cmd_code, 2, data);
retVal = local_device->send(cmd);
当我尝试编译此代码时,我从该行的编译器中收到一个错误:
cmd.data = (uint8 *)realloc(cmd.data, data_len*sizeof(uint8));
并且编译器错误是:
error: lvalue required as left operand of assignment
使用realloc()的目的是重新调整数组数据的大小或从我的新命令结构中完全删除它。我的代码有什么问题?这是用动态内存分配初始化结构的正确方法吗?