[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