sscanf: получить указатель на конечную позицию - PullRequest
0 голосов
/ 20 января 2019

Я хочу разобрать строку const char *str, и мне нужно прочитать ее по частям с несколькими вызовами sscanf()

У меня есть пример того, что я мог бы сделать, если бы это был текстфайл, который можно проанализировать с помощью fscanf(), который обновляет указатель FILE *fp до позиции, которую он перестает читать:

fscanf(fp, "name    %s ", name);
fscanf(fp, "date    %*i ");
fscanf(fp, "{ ");
fscanf(fp, "    isdst   %*i ");
fscanf(fp, "    yday    %*i ");
fscanf(fp, "    wday    %*i ");
fscanf(fp, "    year    %i ", &year);
fscanf(fp, "    mon %i ", &mon);
fscanf(fp, "    mday    %i ", &day);

Но sscanf() не обновляет указатель.Есть ли способ сделать это?

РЕДАКТИРОВАТЬ:

Из комментария @pmg, у меня есть этот код сейчас:

if (sscanf(str, " %lf%n", &a, &pos) != 1)
    goto err;
str += pos;
if (sscanf(str, " %i%n", &b, &pos) != 1)
    goto err;
str += pos;

, который долженбыть эквивалентным одной строке:

if (sscanf(str, " %lf %i", &a, &b) != 2)
    goto err;

Это то, что делает% n?

1 Ответ

0 голосов
/ 20 января 2019

Использовать "%n" спецификатор преобразования в строке формата ... и соответствующей переменной.

...