【发布时间】:2020-04-08 13:23:38
【问题描述】:
我正在处理 Arduino cpp,但在设置变量(在结构中)时遇到了问题。 变量是:
struct cronStructure {
unsigned long every; // every
...
}
...
cronStructure cron[] = {...
而assignemet就是由这个片段生成的:
unsigned long ss;
sscanf(workBuffer+1,"%u",&ss); // workBuffer contains d5
cron[iEvent].every = ss;
events.listEvents(cron);
sprintf(printfBuffer," changed to %d\n", ss);
Serial.println(printfBuffer); // this shows: changed to 5
Serial.println(cron[iEvent].every); // this shows: 3827367941
谢谢
【问题讨论】:
-
您遇到了什么问题?请注意,您同时使用
%u和%d作为格式说明符,两者都不正确,unsigned long应该是%ul -
您显示的代码 sn-p 没有任何问题明显(@AlanBirtles 指出的格式错误除外),因此问题可能出现在其他地方。我们看不到
iEvent是否有有效值,也不知道event.listEvents(cron)做了什么。 -
@AdrianMole 使用错误的格式说明符会导致 UB,更实际地说,OP 显示的结果并不令人惊讶。他们正在读取和写入
ss的同一部分,然后分配并打印整个ss,其中部分没有意义。 -
@walnut - 好点! (其实在我发帖之后,我也玩弄过大小不一的有符号和无符号整数,故意弄错scanf格式,得出了类似的结论。)
标签: c++ arduino long-integer unsigned