Как мне изменить внутренний буфер std :: cin - PullRequest
1 голос
/ 05 декабря 2009

Я пишу программное обеспечение, которое захватывает пароль, используя std::cin

Однако маловероятно, что я пытаюсь избежать возможности переноса пароля на диск из памяти, поэтому я хочу изменить буфер std::cin, чтобы перезаписать пароль, как только я закончу с ним.

сейчас у меня есть это:

std::cin.clear();
std::stringstream ss;
ss << "0000000000000000000000000000000000000000000000";
std::cin.rdbuf(ss.rdbuf());
std::cin.clear();

но я почти уверен, что это плохо, так как не учитывает текущий размер буфера cin. Как правильно перезаписать содержимое буфера?

спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 05 декабря 2009

Даже если вы сразу перебираете буфер, возможно, пароль записан на диск. Системный буфер ввода-вывода может быть выгружен на диск, как и рабочая память, в которой находится std :: cin. Я использовал для разработки криминалистического программного обеспечения, которое отслеживало именно эти условия.

1 голос
/ 05 декабря 2009

Вы можете использовать gptr() и egptr(), чтобы получить начало и конец буфера.

Редактировать: Как указал Чарльз Бейли, они защищены. Я предполагаю, что если вам нужен потоковый буфер, который вы можете очистить его содержимое в указанное время, вы бы реализовали один из ваших собственных, который наследуется от одного из стандартных классов потокового буфера, но предоставляет член clear() ( или любое другое имя, которое вы считаете удобным). Изменение содержимого буфера без ведома менеджера буфера, как правило, будет довольно плохо ...

...