0

文字列を含むクラスがあります。現在、これは std::wstring ですが、そうである必要はありません。ここで std::string を使用すべきではないことを読みましたが、次のようなものが機能するかどうか疑問に思っています:

if (aString.length() == aString.capacity() )
{
    std::wstring oldString = aString;
    aString = wstring(aString);
    aString.reserve(PREALLOCATION_AMOUNT);
    SecureZeroMemory((PVOID)oldString.c_str(),oldString.size());
    oldString.clear();
}

これは基本的に文字列バッファの安全な再割り当てと同じですか? そうでない場合、より良い解決策はありますか?

4

2 に答える 2

0

c_str()が元のバッファを指し、コピーを作成しないという保証はありません。おそらくそれが機能する方法ですが、 の特定の実装を見ずに確認する方法はありませんbasic_string

安全にすることには潜在的な問題が十分にあるstd::wstringので、完全に回避して安全な文字列クラスを見つけるか、独自のクラスを作成します。

于 2012-09-07T19:05:48.937 に答える
0

これが実際に機能するかどうかはわかりませんが、おそらくこれを試すことができます:

#include <algorithm>
#include <string>

// ...

std::string password = "sekrit";
std::fill(password.begin(), password.end(), 0);

もちろん、これは文字列のサイズが決して変更されないことを前提としています。そうである場合、文字列の先頭が格納されていたメモリにアクセスできなくなります。他の人が指摘しているように、それはおそらく悪い考えです。

于 2012-09-07T19:09:18.140 に答える