-1

我有一个功能

SCalibration(uint8_t number, const ABC::report& report,
                         return* ret)
{
    uint8_t args[2];
    args[0]=number;
    memcpy(&(args[1],&report,sizeof(ABC::report)));
}

其中报告是文件 ABC 中具有不同数据类型的结构。当我尝试编译时,我收到错误“L 值需要作为一元和操作数。

请帮忙

4

3 回答 3

0

你有一些流氓括号;看起来你的意思是

memcpy(&args[1],&report,sizeof(ABC::report));

将字节复制reportargs数组中。

现在的问题是,如果报告大于一个字节,这将溢出数组。也许你想要:

uint8_t args[1 + sizeof(ABC::report)];
于 2013-07-25T14:03:55.673 回答
0

您在这一行有一组错位的()s :

memcpy(&(args[1],&report,sizeof(ABC::report)));

看起来您打算:

memcpy(&(args[1]),&report,sizeof(ABC::report));

我的下一个观察是你的目的地只是1 byte你的来源report只是1 byte大小?如果不是你有一个未定义的行为溢出。一种解决方案是根据args数据大小调整大小:

uint8_t args[sizeof(ABC::report)+1];
于 2013-07-25T14:08:05.657 回答
0
memcpy(&(args[1],&report,sizeof(ABC::report)));

应该

memcpy(&(args[1]),&report,sizeof(ABC::report));

您还应该确保它args足够大以容纳结果。

于 2013-07-25T14:03:25.163 回答