我正在尝试使用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
表现得像这样?在此先感谢您的帮助!
答案 0 :(得分:15)
sscanf
期望%s
标记为空格分隔(制表符,空格,换行符),因此您必须在字符串和:
对于丑陋的黑客攻击你可以尝试:
sscanf(Command, "%[^:]:%d", Keyword, &Context);
会强制令牌与冒号不匹配。
答案 1 :(得分:5)
如果你不是特别使用sscanf,你总是可以使用strtok,因为你想要的是标记你的字符串。
char Command[20] = "command:3";
char* key;
int val;
key = strtok(Command, ":");
val = atoi(strtok(NULL, ":"));
printf("Keyword:%s\n",key);
printf("Context:%d\n",val);
在我看来,这更具可读性。
答案 2 :(得分:2)
在此处使用%[
约定。请参阅scanf的手册页:http://linux.die.net/man/3/scanf
#include <stdio.h>
int main()
{
char *s = "command:3";
char s1[0xff];
int d;
sscanf(s, "%[^:]:%d", s1, &d);
printf("here: %s:%d\n", s1, d);
return 0;
}
将“here:command:3”作为输出。