[英]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 = 0
, n
一直超过"flag (%1c,%d)"
则n
将仅为非零。如果由于输入流中缺少')'
而导致扫描停止,则n
将为0且失败command[n] == '\\0'
。 对于n
的非零值,我们可以很容易地测试是否有超过"flag (%1c,%d)"
额外垃圾。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.