我需要为格式函数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++,则可以使用静态变量或全局变量的构造函数).