Определение размера вывода vsprintf - PullRequest
0 голосов
/ 16 сентября 2018

Я реализую printf(const char * format, ...) подобный метод для класса, где мне нужно определить точный размер его вывода, учитывая только предоставленные format и аргументы, приведенные в va_list, перед вызовом vsprintf() для выполненияфактическая запись.

Есть ли функция, которая может взять format и va_list для генерации точной длины вывода?

1 Ответ

0 голосов
/ 16 сентября 2018

Начиная с примера в документации , вы можете определить необходимый размер буфера 1-й (выделено мной):

std::vector<char> buf(1+std::vsnprintf(NULL, 0, fmt, args1)); // <<<
va_end(args1);
std::vsnprintf(buf.data(), buf.size(), fmt, args2);

4) Записывает результаты в символстроковый буфер.Максимум buf_size-1 символов написано.Результирующая символьная строка будет оканчиваться нулевым символом, если только buf_size не равен нулю.Если buf_size равен нулю, ничего не записывается , а буфер может быть нулевым указателем, однако возвращаемое значение (число байтов, которое будет записано, не включая нулевой терминатор) все еще вычисляется и возвращается .

Как правило, все варианты семейства функций <x>sprintf() могут использоваться для вычисления необходимого размера буфера, если целевой параметр буфера передается как NULL или nullptr.

...