[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