1

在 MSVC 中,许多字符串函数提供原始版本、安全版本和strsafe版本。例如,sprintfsprintf_sStringCchPrintf都是等价的,增加了安全性(通过某种度量)。

现在,我有一些代码可以做到:

int bufsize = _vscwprintf(fmt, args) + 1;
std::vector<wchar_t> buffer(bufsize);

int len = _vsnwprintf_s(&buffer[0], bufsize, bufsize-1, fmt, args);

分配正确大小的缓冲区。

在查看 strsafe 函数时,我找到了一个替代方法_vsnwprintf_s,但没有找到_vscwprintf. 谷歌的检查似乎没有返回任何东西。

是否有一种 strsafe 方式来编写那段代码,或者我缺少的替代函数,或者混合原始函数和 strsafe 函数是否可以接受?(没有关于当前方式的安全警告,在 /w4 上使用 PREfast 所有规则)

4

1 回答 1

2

_vscwprintf() 仅计算安全格式化字符串所需的 wchar_t[] 数组的大小,它实际上并不向缓冲区写入任何内容。因此,您不需要并且没有该功能的安全版本。

于 2011-11-15T23:59:39.203 回答