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 回答