我的软件验证小组正在测试如下一段代码:
unsigned int alarm_id;
char alarm_text[16];
static const char text_string[] = "105, Water_Boiling";
signed int arguments_satisfied =
sscanf(text_string,
"%3d, %16s",
&alarm_id, &alarm_text[0]);
if (arguments_satisfied < 2)
{
system_failure();
}
使用上面的代码片段,有没有办法让 sscanf
返回一个大于 2 的值而不改变格式说明符或改变 sscanf
的参数?
他们正在使用单元测试工具来执行 if
语句表达式。
对于C++,编译为C++时,与上面的片段有什么不同吗?
(我们计划使用相同的代码,但编译为 C++。)
仅供引用,我们使用带有 IAR Embedded Workbench 的 ARM7 处理器。
最佳答案
sscanf 返回转换后的参数数量。它不能转换比你告诉它的更多的参数。因此,除非更改格式字符串,否则 sscanf 不能返回大于 2 的值。一个可能的异常——如果在转换第一个参数之前用完数据,则可能返回 EOF,但我怀疑只有适用于 scanf,不适用于 sscanf。
关于c++ - 强制 sscanf 返回超过满足数量的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20556717/