如何在Linux gcc下确定vswprintf的缓冲区大小

Lud*_*cka 5 c++ unicode gcc

我需要为格式函数vswprintf()分配足够的缓冲区.当用ANSI字符串做同样的事情时,我正在使用:

vsnprintf( NULL, NULL, pszFormat, args );
Run Code Online (Sandbox Code Playgroud)

它返回我所需的缓冲区大小.但似乎这个函数的unicode版本没有这个功能.当我执行:

vswprintf( NULL, NULL, pszFormat, args );
Run Code Online (Sandbox Code Playgroud)

结果值始终为-1.

我发现只有解决方案是使用大型静态缓冲区来计算所需的大小.但我不喜欢这个解决方案:

static const int nBuffSize = 1024;
static XCHAR evalBuff[nBuffSize];
int nSize = vswprintf( evalBuff, nBuffSize, pszFormat, args );
if ( nSize != -1 )
{
 return nSize;
}
else
{
 throw XXX;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法如何测量unicode字符串所需的缓冲区大小?

关心卢德克

小智 5

打开一个虚拟文件到/ dev/null(或Windows下的NUL)并打印到该文件以检索大小非常有效(它比打印到字符串更快):

#if!defined(_MSC_VER)
   printf_dummy_file = fopen("/ dev/null","wb");
#else
   printf_dummy_file = fopen("NUL","wb");
#万一

...

n = vfprintf(printf_dummy_file,format,args);

"fopen"部分应该完成一次(如果使用的是C++,则可以使用静态变量或全局变量的构造函数).