繁体   English   中英

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

[英]Detect null character in string with sscanf in C

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

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

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

sscanf()无法扫描'\\0'

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

相反,要检测扫描是否停在'\\0'

int n = 0;
if ((sscanf(command, "flag (%1c,%d)%n", &x1, &y1, &n)) == 2) && 
    (command[n] == '\0')) Success();

[编辑@Jonathan Leffler建议]

每当scanf()返回值2时,已知扫描通过"flag (%1c,%d" ,但不一定是"flag (%1c,%d)"使其最小。通过设置n = 0n一直超过"flag (%1c,%d)"n将仅为非零。如果由于输入流中缺少')'而导致扫描停止,则n将为0且失败command[n] == '\\0' 对于n的非零值,我们可以很容易地测试是否有超过"flag (%1c,%d)"额外垃圾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM