2014-12-15 4 views
4

Есть ли функция в C или C++, чтобы выполнить инверсию в snprintf, так чтоИнверсия snprintf

char buffer[256] 
snprintf(buffer, 256, "Number:%i", 10); 

// Buffer now contains "Number:10" 

int i; 
inverse_snprintf(buffer,"Number:%i", &i); 

// i now contains 10 

я могу написать функцию, которая удовлетворяет этому требованию себя, но есть уже один в стандарте библиотеки?

+6

['sscanf()'] (возможно, http://en.cppreference.com/w/c/io/fscanf)? –

ответ

13

Да, есть sscanf(). Он возвращает количество токенов, успешно сопоставленных с входом, поэтому вы можете проверить возвращаемое значение, чтобы увидеть, как далеко оно попало во входную строку.

if (sscanf(buffer, "Number:%i", &i) == 1) { 
    /* The number was successfully parsed */ 
} 
+0

Конечно, необходимо убедиться, что вход в 'sscanf' был сначала нулевым. –

+0

@MikeDeSimone Ну ... да. Это касается почти каждой функции, принимающей строку C. – cdhowie

+1

Стандартная библиотека C++ перешла из использования семейства 'fscanf' (C++ 03) для использования, например. 'strtoll' (C++ 11), чтобы избежать определенных проблем UB. Я бы рекомендовал, чтобы OP использовал ['strol'] (http://en.cppreference.com/w/cpp/string/byte/strtol) вместо' sscanf'. –

Смежные вопросы