1

MSVCでは、多くの文字列関数が元のバージョン、安全なバージョン、およびstrsafeバージョンを提供します。たとえば、、、sprintfおよびsprintf_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関数を混合することは許容されますか?(現在の方法については、すべてのルールがPREfastの/ w4で、安全上の警告は表示されません)

4

1 に答える 1

2

_vscwprintf()は、文字列を安全にフォーマットするために必要なwchar_t []配列のサイズを計算するだけであり、実際にはバッファに何も書き込みません。したがって、必要はなく、関数の安全なバージョンはありません。

于 2011-11-15T23:59:39.203 に答える