memcpy qt和编译错误

时间:2013-07-25 14:00:17

标签: c++ qt

我有一个功能

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

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

请帮忙

3 个答案:

答案 0 :(得分:0)

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

应该是

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

您还应确保args足够大以保存结果。

答案 1 :(得分:0)

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

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

report的字节复制到args数组中。

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

uint8_t args[1 + sizeof(ABC::report)];

答案 2 :(得分: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];