C-sscanf 不工作
我正在尝试使用 sscanf 从字符串中提取字符串和整数:
#include<stdio.h>
int main()
{
char Command[20] = "command:3";
char Keyword[20];
int Context;
sscanf(Command, "%s:%d", Keyword, &Context);
printf("Keyword:%s\n",Keyword);
printf("Context:%d",Context);
getch();
return 0;
}
但这给了我输出:
Keyword:command:3
Context:1971293397
我期待这个输出:
Keyword:command
Context:3
为什么 sscanf 的行为像这样?预先感谢您的帮助!
I'm trying to extract a string and an integer out of a string using sscanf
:
#include<stdio.h>
int main()
{
char Command[20] = "command:3";
char Keyword[20];
int Context;
sscanf(Command, "%s:%d", Keyword, &Context);
printf("Keyword:%s\n",Keyword);
printf("Context:%d",Context);
getch();
return 0;
}
But this gives me the output:
Keyword:command:3
Context:1971293397
I'm expecting this ouput:
Keyword:command
Context:3
Why does sscanf
behaves like this? Thanks in advance you for your help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
sscanf
期望%s
标记以空格分隔(制表符、空格、换行符),因此在字符串和 : 之间必须有一个空格,这样会显得丑陋您可以尝试寻找 hack:
这将强制令牌与冒号不匹配。
sscanf
expects the%s
tokens to be whitespace delimited (tab, space, newline), so you'd have to have a space between the string and the :for an ugly looking hack you can try:
which will force the token to not match the colon.
如果您不特别喜欢使用 sscanf,则始终可以使用 strtok,因为您想要的是对字符串进行标记。
在我看来,这更具可读性。
If you aren't particular about using sscanf, you could always use strtok, since what you want is to tokenize your string.
This is much more readable, in my opinion.
此处使用
%[
约定。请参阅 scanf 的手册页: http://linux.die.net/man/3/scanf< /a>给出“here:command:3”作为其输出。
use a
%[
convention here. see the manual page of scanf: http://linux.die.net/man/3/scanfwhich gives "here:command:3" as its output.