参数少于指定的sscanf?

时间:2012-10-08 19:20:00

标签: c cstring scanf c-strings

所以我想知道sscanf在面对这样一条线时是如何运作的:

sscanf(input_string, "%s %s %s", cmd1, cmd2, cmd3);

但是说input_string只包含1个字符串标记。为cmd2和cmd3分配了什么值?是否抛出了错误?

我正在使用GNU C编译器。

2 个答案:

答案 0 :(得分:4)

不会为额外参数分配任何内容。 sscanf的回复会告诉您已成功完成了多少次转化,因此在这种情况下,它会返回1。您通常只是与您期望的数字进行比较,并假设输入是错误的,否则:

if (3 != sscanf(input_string,"%s %s %s", cmd1, cmd2, cmd3))
    fprintf(stderr, "Badly formatted input (expecting three strings)\n");

当您从文件中读取数据时,通常需要在循环中执行,直到输入正确为止:

while (3 != scanf("%s %s %s", cmd1, cmd2, cmd3))
    fprintf(stderr, "Please enter 3 strings:");

答案 1 :(得分:2)

http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/

  

成功时,该函数返回参数中的项数   列表已成功填写。此计数可以匹配预期的数量   在匹配失败的情况下,项目或少于零。在里面   在任何数据成功之前输入失败的情况   解释,退还EOF。