我得到了一个字符串变量(包含密码),并且在变量释放之前会like to overwrite it's value with a sequence of '0'。我想做类似的事情:
void overwrite(std::string &toOverwrite){
if(toOverwrite.empty())
return;
else{
std::string removeString;
size_t length = toOverwrite.size();
for(int i = 0; i < length; i++){
removeString += "0";
}
toOverwrite = removeString;
}
}
但不知怎的,这感觉不对。
toOverwrite = removeString
真的会替换toOverwrite
或只是使toOverwrite
的“指针”指向removeString
}?也许我应该使用std::string::replace
方法或将数据类型更改为char * / byte []?
答案 0 :(得分:2)
可能只是交换和释放指针,将密码保留在内存中不再指向的位置。如果要覆盖字符串数据,请执行以下操作:
std::fill(toOverwrite.begin(), toOverwrite.end(), '0');
您也不需要测试空字符串。