我正在为一个类实现类似printf(const char * format, ...)
的方法,在此之前,我需要仅在提供的format
和va_list
中给定的参数的情况下,确定其输出的确切大小。调用vsprintf()
进行实际书写。
是否有一个函数可以使用format
和va_list
来生成输出的确切长度?
答案 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
函数系列的所有变体都可以用于计算必要的缓冲区大小。