确定vsprintf输出的大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了确定vsprintf输出的大小相关的知识,希望对你有一定的参考价值。

我正在实现类的printf(const char * format, ...)方法,在调用format执行实际写入之前,我需要确定它的输出的确切大小,只给出提供的va_listvsprintf()中给出的参数。

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

答案

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

以上是关于确定vsprintf输出的大小的主要内容,如果未能解决你的问题,请参考以下文章

PHP中函数sprintf .vsprintf (占位符)

vsprintf解析

Error:LNK2019无法解析的外部符号_sscanf, _vsprintf

stdio 函数(sprintf、vsprintf 和 fprintf)背后的命名约定是啥?

使用addr2line 定位 FORTIFY: vsprintf: prevented write past end of buffer‘ 报错解决思路

使用addr2line 定位 FORTIFY: vsprintf: prevented write past end of buffer‘ 报错解决思路