在MSVC中,许多字符串函数提供原始版本,安全版本和strsafe版本。例如,sprintf
,sprintf_s
和StringCchPrintf
都是等价物,安全性提高(按某种指标)。
现在,我有一些代码可以做到:
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所有规则)
答案 0 :(得分:2)
_vscwprintf()仅计算安全格式化字符串所需的wchar_t []数组的大小,它实际上并未向缓冲区写入任何内容。因此,您不需要,并且没有该功能的安全版本。