c++ - 强制 sscanf 返回超过满足数量的参数

标签 c++ c scanf format-specifiers

我的软件验证小组正在测试如下一段代码:

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/

相关文章:

c++ - 如何在 C++ 中使用模板创建商业库?

c - 编写质因数分解程序 C

c - 在任何平台上使用 ANSI C 保存和加载数据

c - 使用 fork() 和 execvp() 函数创建 C 程序时遇到问题

c - Scanf 因总线错误而失败

c++ - 无法重载 + 运算符来添加 2 个对象

c++ - 具有 boost 变体的段错误

c++ - QString 数字在串行通信中保持不变

c - 如何获取指向动态库(Linux ELF)特定部分的指针?

c - Scanf 似乎工作不正常,或者我做错了什么