【发布时间】:2013-12-31 15:27:45
【问题描述】:
我的软件验证小组正在测试一段代码,如下所示:
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 处理器。
【问题讨论】:
-
您是要让它返回大于 2,还是要确保您的 if 语句永远不会错过失败?但是,c++ 没有区别。
-
如果
text_string的alarm_text 字段长度为16 个或更多字符,%16s格式将在alarm_text数组的末尾写入一个'\0'。alarm_text数组需要有 17 个元素或格式说明符需要是%15s。 -
system_failure函数中,世界爆炸了吗? -
@BitFiddlingCodeMonkey:本质上,是的,系统的世界炸了(发送到安全的等待模式)。
-
编译器是否可以将所有代码优化到
if()并实现arguments_satisfied必须为2,然后优化出system_failure()?
标签: c++ c scanf format-specifiers