Получить количество символов, прочитанных sscanf?
я разбираю строку (a char*
) и я использую sscanf
для разбора чисел из строки в двойники, например:
// char* expression;
double value = 0;
sscanf(expression, "%lf", &value);
это отлично работает, но я хотел бы продолжить разбор строки с помощью обычных средств. Мне нужно знать, сколько символов было разобрать sscanf
чтобы я мог возобновить разбор вручную из нового смещения.
очевидно, самым простым способом было бы каким-то образом вычислить количество символов, которые sscanf
парсит, но если нет простого способа сделать это, я am открыть альтернативные варианты двойного синтаксического анализа. Однако, в настоящее время я использую sscanf
потому что это быстро, просто и читаемо. В любом случае, мне просто нужен способ оценить дубль и продолжить разбор после него.
2 ответов
вы можете использовать спецификатор формата %n
и до sscanf()
:
int pos;
sscanf(expression, "%lf%n", &value, &pos);
описание спецификатора формата n
из стандарта C99:
вход не потребляется. соответствующий аргумент должен быть указателем на целое число со знаком, в которое должно быть записано количество символов, считанных из входного потока до сих пор этим вызовом
fscanf
функции. Исполнение%n
директива не увеличивает количество назначений, возвращаемых при завершении выполнения
int i, j, k;
char s[20];
if (sscanf(somevar, "%d %19s %d%n", &i, s, &j, &k) != 3)
...something went wrong...
переменная k
содержит количество символов до точки, где конец целого числа хранится в j
была отсканирована.
отметим, что %n
не учитывается в успешных преобразованиях. Вы можете использовать %n
несколько раз в строке формата, если вам нужно.