c++ - 清除标准输入缓冲区(内存占用)

标签 c++ c memory stdin core

在我的情况下,我的应用程序的用户被要求输入他们的密码来启动它。要获取密码,我只需使用:

char c;  
std::string password;
while ...  // until the end of entry
{
    c = fgetc(stdin);
    password += c;
}

检查密码后,我会销毁该变量,因此无法使用我的程序的核心镜像检索它。例如,如果有人使用“gcore”命令,然后在生成的核心中搜索密码,它将找不到。

但就我而言,我仍然可以检索密码值,因为它似乎仍在标准输入缓冲区中。

所以我的问题是如何清除标准输入缓冲区以使用户键入的值在内存中不再可用?

有关我已经尝试过的信息:fflush、__fpurge、fwrite(从 stdin 流的开始位置开始)...但似乎没有任何效果。

提前谢谢你。

最佳答案

我的回答是:不要使用独立的 I/O 流——而是使用原始文件 I/O:

read(STDIN_FILENO, ...)

您必须自己做行缓冲,但您可以保证库中没有任何内容保留您的输入缓冲区。

关于c++ - 清除标准输入缓冲区(内存占用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17954542/

相关文章:

c++ - boost 分词器/字符分隔符

c++ - 如何编写利用 ADL 的概念

c - 当值溢出时,将浮点类型转换为无符号整数类型时会发生什么情况?

c++ - C中的结构内存布局

c - 用字符填充的动态分配的字符串导致空字符串 C

c++ - 为什么这个返回值? C++ int/char 混淆

c++ - 适用于 Windows CE 的任何 OSTN02 库

c - 将 bsearch 与字符串数组一起使用时出现问题

c - 我未初始化的结构值是多少?

sql-server - 有人可以解释我的 Windows/SQL Server 内存使用情况吗