gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:32:05 35 4
gpt4 key购买 nike

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

vsnprintf( NULL, NULL, pszFormat, args );

它返回我所需的缓冲区大小。但是好像这个函数的unicode版本没有这个功能。当我执行时:

vswprintf( NULL, NULL, pszFormat, args );

结果值总是-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;
}

有什么方法可以测量 unicode 字符串所需的缓冲区大小吗?

问候卢德克

最佳答案

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

#if !defined(_MSC_VER)
printf_dummy_file = fopen("/dev/null", "wb");
#其他
printf_dummy_file = fopen("NUL", "wb");
#endif

...

n = vfprintf(printf_dummy_file, 格式, 参数);

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

关于c++ - 如何在 Linux gcc 下确定 vswprintf 的缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107947/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com