2011-11-15 34 views
1

在MSVC中,许多字符串函数提供了原始版本,安全版本和版本号strsafe。例如,sprintf,sprintf_sStringCchPrintf都是等同的,安全性增加(通过一些度量)。_vscwprintf的安全替代方案

现在,我有一些代码,做:

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。 Google的支票似乎没有任何回报。

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

回答

2

_vscwprintf()仅计算需要安全格式化字符串的wchar_t []数组的大小,它实际上不写任何东西到缓冲区。因此,你不需要,也没有安全的功能版本。