确定vsprintf输出的大小

时间:2018-09-16 01:35:08

标签: c++ visual-studio-2015 printf

我正在为一个类实现类似printf(const char * format, ...)的方法,在此之前,我需要仅在提供的formatva_list中给定的参数的情况下,确定其输出的确切大小。调用vsprintf()进行实际书写。

是否有一个函数可以使用formatva_list来生成输出的确切长度?

1 个答案:

答案 0 :(得分:2)

example in the documentation开始,您可以确定必要的缓冲区大小1st(重点是我的):

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函数系列的所有变体都可以用于计算必要的缓冲区大小。