我有一个功能
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值需要作为一元和操作数。
请帮忙
答案 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];