[cdev] sscanf
Grigoriy A. Sitkarev
sitkarev на komitex.ru
Пн Дек 27 10:54:09 MSK 2010
Для понимания пойдёт.
В практическом использовании есть нюансы.
1. Если читаем строку, обязательно нужно указывать максимальный размер
буфера БЕЗ учёта последнего байта где хранится '\0'. Т.е. в случае если
бы мы хотели записывать в буфер stub то надо было везде в спецификаторе
преобразования писать %255s.
2. Иногда нам не нужны значения, но в форматной строке мы их должны
указать sscanf() чтобы добраться до следующих. Тогда нужно добавлять
звёздочку сразу после знака спецификатора преобразования '%'.
sscanf(str, "%*s %i %*s %*s %*s %*s %*s %i %*s", &ten, &nine);
3. Зачем нам печатать значение res если туда ничего не попало?? Должно
быть так:
res = sscanf(...);
Тогда есть смысл его печатать.
--
Г.А.
Mikhail Ilyin пишет:
> А если вот так для понимания :). Последний аргумент %s можно не указывать
> и не вычитывать '.' из строки.
>
> int res, nine = 0, ten = 0;
> char str[] = "I'm 10 years old. And you are 9.";
> char stub[256];
>
> sscanf(str, "%s %i %s %s %s %s %s %i %s", stub, &ten, stub, stub, stub, stub, stub, &nine, stub);
> printf("%i %i %i\n", ten, nine, res);
>
Подробная информация о списке рассылки cdev