C - sscanf not working

dpp picture dpp · Oct 25, 2011 · Viewed 9.4k times · Source

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!

Answer

John Weldon picture John Weldon · Oct 25, 2011

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:

sscanf(Command, "%[^:]:%d", Keyword, &Context);

which will force the token to not match the colon.