安全地调整和删除std::string
我有一个包含字符串的类。目前,它是一个std::wstring,但不一定是。我已经读到不应该使用std::string,但我想知道这样做是否有效:安全地调整和删除std::string,string,security,visual-c++,resize,String,Security,Visual C++,Resize,我有一个包含字符串的类。目前,它是一个std::wstring,但不一定是。我已经读到不应该使用std::string,但我想知道这样做是否有效: if (aString.length() == aString.capacity() ) { std::wstring oldString = aString; aString = wstring(aString); aString.reserve(PREALLOCATION_AMOUNT); SecureZeroMe
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();
}
这基本上等同于字符串缓冲区的安全realloc吗?如果没有,是否有更好的解决方案?不能保证
c_str()
将指向原始缓冲区而不复制。这可能就是它的工作方式,但是如果不查看basic\u string
的具体实现,就无法确定
使
std::wstring
安全有足够多的潜在问题,因此我会完全避免它,并找到一个安全的字符串类或编写自己的。我不知道这是否真的有效,但也许您可以尝试以下方法:
#include <algorithm>
#include <string>
// ...
std::string password = "sekrit";
std::fill(password.begin(), password.end(), 0);
#包括
#包括
// ...
std::string password=“sekrit”;
std::fill(password.begin(),password.end(),0);
当然,这是假设您的字符串从未调整大小。如果是,您将无法访问存储字符串开头的内存。正如其他人所指出的,这可能是个坏主意