所以我想知道sscanf在面对这样一条线时是如何运作的:
sscanf(input_string, "%s %s %s", cmd1, cmd2, cmd3);
但是说input_string只包含1个字符串标记。为cmd2和cmd3分配了什么值?是否抛出了错误?
我正在使用GNU C编译器。
答案 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。