用户提供的多余数据会发生什么变化?

时间:2012-05-30 06:49:40

标签: c++ memory memory-management

在C ++中,如果给出了多余的输入会发生什么?它是存储在某处还是完全被忽略了?

例如,此示例代码:

#include <iostream>
using namespace std;
int main()
{
   char a, b, c;

   cout << "Enter three letters: ";

   cin.get(a).get(b).get(c);

   cout << "a: " << a << "\nb: " << b << "\nc: " << c << endl;
 return 0;
}

只要求三个字母,就让我输入我想要的数量。所有其他的去哪儿了?无处不在......对吗?

2 个答案:

答案 0 :(得分:3)

他们进入输入缓冲区。当您的进程退出(不读取它们)时,缓冲区将被丢弃(以及未读取的内容)。

答案 1 :(得分:2)

这取决于。有几个缓冲区在起作用。 通常(没有 保证,但肯定是Unix和Windows的情况),你必须 在程序看到任何数据之前按Enter键;你打字的一切 直到并包括进入然后进入你的过程中的缓冲区,这 然后在进程终止时丢弃。

这是默认行为,假设您的进程已启动 从shell的命令行,并连接该标准输入 到键盘。如果另一个流程已启动您的流程,则可能 重新配置输入以表现不同;这很有可能 配置键盘(至少在Unix下)发送每个字符 因为它输入了,在这种情况下,下一个读取键盘的过程 在你阅读之后,它将获得额外的角色。

最后,如果标准输入来自一个文件,当然还有数据 正如你所期望的那样,文件保持原样。如果它来自管道,在 至少在Unix上,数据将被丢弃,任何进程仍然存在 写入管道将收到信号。