Почему sscanf принимает более чем желаемое значение в C? - PullRequest
0 голосов
/ 02 мая 2020

Почему sscanf принимает больше требуемого значения?

Пример кода:

int main()
{
    char *str="a:b:c:d:g:s:d";
    int a[4]={0};
    int ret;
    ret = sscanf(str,"%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3]); /*It prints 4 but in input I have given 7 values(a,b,c,d,g,s,d)*/
    if(ret==4)
    {
        printf("success\n");// it prints success anyways!
    }
    return 0
}

Я хотел бы go внутри условия if, только если * str содержит 4 октета ( a: b: c: d - только шестнадцатеричные значения).

ПРИМЕЧАНИЕ. Если я даю менее 4 октетов, это не входит в условие if.

1 Ответ

1 голос
/ 02 мая 2020

В вашей строке не было семи значений, поскольку "g" и "s" не являются допустимыми шестнадцатеричными значениями. Поэтому сначала исправьте:

char *str="a:b:c:d:e:f:1";

Затем попробуйте прочитать более четырех значений:

ret = sscanf(str,"%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&ret);

Теперь, если существует более четырех значений, этот код будет читать пять из них, и if не удастся. Я повторно использовал ret, потому что присвоение возвращаемого значения гарантированно произойдет после. Но если это вас пугает или смущает, вы можете сделать это:

int dummy;
ret = sscanf(str,"%x:%x:%x:%x:%x",&a[0],&a[1],&a[2],&a[3],&dummy);
...