2

所以我想知道当面对这样的一行时 sscanf 是如何工作的:

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

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

我正在使用 GNU C 编译器。

4

2 回答 2

4

不会为额外参数分配任何内容。return fromsscanf告诉您成功完成了多少次转换,所以在这种情况下它会 return 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:");
于 2012-10-08T19:23:27.533 回答
2

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

成功时,该函数返回参数列表中成功填充的项目数。在匹配失败的情况下,此计数可以匹配预期的项目数或更少 - 甚至为零。如果在成功解释任何数据之前输入失败,则返回 EOF。

于 2012-10-08T19:22:33.380 回答