正在强制sscanf返回多个已满足的参数
Forcing sscanf to return more than number of arguments satisfied
我的软件验证小组正在测试一段代码,如下所示:
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嵌入式工作台的ARM7处理器。
sscanf返回转换的参数数。它无法转换比你告诉它的更多的论点。因此,除非更改格式字符串,否则sscanf不能返回大于2的值。一个可能的例外——如果在转换第一个参数之前用完了数据,则可能会返回EOF,但我怀疑这只适用于scanf,而不适用于sscanf。
对于许多工具链(我很确定IAR是一个),如果在对象文件和库中有一个符号,链接器将链接到对象文件中的符号,而不是库中的符号。
因此,您可以在测试期间提供自己的sscanf()
函数来链接,并让它返回您喜欢的任何内容。
如果链接器在您的sscanf()
实现和库中的实现之间存在符号冲突问题,那么另一种可行的方法是让您使用不同的名称(如unittest_sscanf
)对sscanf()
进行单元测试,并让构建系统定义一个宏,以便在构建过程中使用类似于/Dsscanf=unittest_sscanf
的方法为被测模块重命名sscanf()
。
当然,要确保其他未经过测试的sscanf()
调用不会引起问题可能会很棘手。
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 正在强制sscanf返回多个已满足的参数
- 为什么可以在构造函数中使用成员初始化来满足显式构造函数的参数?
- 如何在满足某个参数时停止所有函数
- 指针强制转换以满足方法参数是一件危险的事情吗?
- 模板参数未满足所有要求