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
ведет себя так? Заранее благодарю вас за вашу помощь!
Ответы
Ответ 1
sscanf
ожидает, что токены %s
будут разделены пробелами (вкладка, пробел, новая строка), поэтому вам нужно иметь пробел между строкой и:
для уродливого вида взлома вы можете попробовать:
sscanf(Command, "%[^:]:%d", Keyword, &Context);
который заставит токен не соответствовать двоеточию.
Ответ 2
Если вы не особенно разбираетесь в использовании 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);
Это гораздо более читаемо, на мой взгляд.
Ответ 3
используйте соглашение %[
здесь. см. страницу руководства 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;
}
который дает здесь: command: 3 ".