[cdev] sscanf

Константин Никулов nateford на inbox.ru
Пн Дек 27 13:09:15 MSK 2010


Ага. Т.е. получается, если мы хотим вычленить целые, надо между ними натыкать %*s,  чтобы показать что там может что-то быть?


Mon, 27 Dec 2010 09:54:09 +0300 письмо от "Grigoriy A. Sitkarev" <sitkarev на komitex.ru>:

> Для понимания пойдёт.
> 
> В практическом использовании есть нюансы.
> 
> 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 mailing list
> cdev на wiki.syktsu.ru
> http://wiki.syktsu.ru/cgi-bin/mailman/listinfo/cdev





Подробная информация о списке рассылки cdev