Я хочу предвосхитить мой ответ, сказав, что, если вы не создаете какую-то криптографическую библиотеку, в которой задействована конфиденциальная информация, действительно нет веских причин для этого. И на самом деле, если вы делает это, вы должны предпринять дополнительные шаги, чтобы запутать код, чтобы не было понятно, что он делает.Но я покажу вам простой способ сделать это.
Странно, что он не удаляет себя, поскольку строка размещается в стеке.
Это нормально.На самом деле в стеке нет ничего особенного, за исключением того, что он, как правило, более быстрый и менее затратный по сравнению с кучей и работает в противоположном направлении.
Когда ваша программа загружается в память, она загружается с.bss
и секция .data
.Строковые литералы находятся в разделе .data
, доступном только для чтения.Если вы хотите, чтобы что-то не было видно в памяти, вы не должны использовать строковый литерал."blabla"
в кавычках - строковый литерал.
Вот как избежать использования строкового литерала:
#include <string>
#include <iostream>
int main()
{
std::string test = { 'b','l','a','b','l','a','\0' };
std::cout << test << std::endl;
// Okay, I'm done with it now...
test.assign(6,'\0'); // blabla is replaced with zeroes
}