LINUX.ORG.RU

[С] в sscanf указать формат длинной строки с пробелами


0

1

Есть строка

char ot[1000]; // содержит "0 2.7 Тут текст с !пробелами! всегда разной длины"
sscanf( ot, "%d %lf %s",&pr,&zn,ot);
отловил все кроме последней части, как ее дальше обработать?



Последнее исправление: mordovorot (всего исправлений: 2)

[code=c] scanf(«%s[^\ ]» , &your_str_with_spaces_here); [/code]

как то так. что то там в man page было, точно не уверен что так, ртм.

mi_estas
()

Что требуется сделать то с «Тут текст с !пробелами! всегда разной длины»? На слова разбить или что?

delete83 ★★
()
Ответ на: комментарий от mi_estas

А понял, это похоже на регулярное выражение

mordovorot
() автор топика
Ответ на: комментарий от rg-400

Она у него длиннее 1000 символов быть не может :)

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от mi_estas

вот жеж блин. в строке со scanf цифра 10 после второго процента куда-то делась.

mi_estas
()
Ответ на: комментарий от mi_estas

Можно вообще не заморачиваться особо с размером выделяемого буффера и писать что-то вроде

char *b;
scanf("%d %m[^\n\r]", &a, b);
// some code...
free(b);

Но это будет верно только для стандарта C99.

delete83 ★★
()

Что-то мне подсказывает, что передача одного и того же буфера в качестве входного и выходного аргумента для scanf может привести к непредсказуемым результатам.

Deleted
()
Ответ на: комментарий от Reset

> Что это за жесть? В Си такого нет.

В каком Си этого нет, MSVS? В драфте C99 это есть.

tailgunner ★★★★★
()
15 февраля 2012 г.
Ответ на: комментарий от delete83

[code=c]char *b; scanf(«%d %m[^\n\r]», &a, b); // some code... free(b);[/code] Зачем высвобождать память? Кто нибудь обьясните?

anonymous
()
Ответ на: комментарий от anonymous

извиняюсь

char *b; 
scanf("%d %m[^\n\r]", &a, b); 
// some code... 
free(b);

Зачем высвобождать память? Кто нибудь обьясните?

anonymous
()
Ответ на: комментарий от delete83

Кстати, там опечатка. Должно быть

scanf(«%d %m[^\n\r]», &a, &b);

Хотя такую оплошность компилятор выловит на раз-два.

delete83 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.