使用C中的sscanf检测字符串中的空字符

时间:2014-05-27 20:56:21

标签: c arrays pointers command scanf

我正在编写一个支持“新”命令的游戏,我的想法是,当我尝试验证它们时,我需要确保在给出命令之后,除了字符串中的空字符之外别无其他。我试过用这个:

if(sscanf(command, "flag (%1c,%d)%c", &x1, &y1, &nullChar)) == 3) {
...
}

但是,sscanf将始终返回2,这意味着nullChar验证无效。我该如何验证?我非常感谢你的帮助,谢谢!

1 个答案:

答案 0 :(得分:3)

sscanf()无法扫描'\0'

int sscanf(const char *s, const char *format, ...);扫描char s的每个'\0',直至遇到'\0',然后扫描停止而不对format '\0'进行测试。

相反,要检测扫描是否停在int n = 0; if ((sscanf(command, "flag (%1c,%d)%n", &x1, &y1, &n)) == 2) && (command[n] == '\0')) Success();

scanf()

[编辑@Jonathan Leffler建议]

每当"flag (%1c,%d"返回值为2时,就会知道扫描通过"flag (%1c,%d)"进行扫描最少,但不一定是n = 0。通过设置n,如果"flag (%1c,%d)"完全超过')',则n将仅为非零。由于输入流中缺少command[n] == '\0'而导致扫描停止,n将为0且失败"flag (%1c,%d)"。对于{{1}}的非零值,我们可以轻松测试是否有额外的垃圾{{1}}。