2011-11-15 58 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 []數組的大小,它實際上不寫任何東西到緩衝區。因此,你不需要,也沒有安全的功能版本。