2012-09-07 105 views
0

我有一個包含字符串的類。目前,它是一個std :: wstring,但不一定是。我讀過here說的std :: string不應該被使用,但我想知道如果像這樣的工作:安全地調整和刪除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(); 
} 

將這個基本等同於字符串緩衝區的安全realloc的?如果沒有更好的解決方案?

回答

0

不保證c_str()將指向原始緩衝區並且不復制。這是可能是它的工作方式,但沒有辦法確定沒有看到你的具體實施basic_string

有足夠的潛在問題使std::wstring安全,我會完全避免它,找到一個安全的字符串類或寫我自己的。

0

我不知道這是否會實際工作,但也許你可以試試這個:

#include <algorithm> 
#include <string> 

// ... 

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

當然,這個假設您的字符串是永遠不會改變大小。如果是這樣,您將失去對存儲字符串起始位置的內存的訪問權限。正如其他人指出的那樣,這可能是一個壞主意。