所以我想知道当面对这样的一行时 sscanf 是如何工作的:
sscanf(input_string, "%s %s %s", cmd1, cmd2, cmd3);
但是说 input_string 只包含 1 个字符串标记。为 cmd2 和 cmd3 分配了哪些值?是否抛出错误?
我正在使用 GNU C 编译器。
不会为额外参数分配任何内容。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:");
http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/
成功时,该函数返回参数列表中成功填充的项目数。在匹配失败的情况下,此计数可以匹配预期的项目数或更少 - 甚至为零。如果在成功解释任何数据之前输入失败,则返回 EOF。