输入流 和输入缓冲区什么关系啊

来源:百度知道 编辑:UC知道 时间:2024/06/06 05:47:40

1、按下enter会把之前输入的字符(包括回车符自己)送入到输入缓冲区,但并不会刷新输入流。输入流是C++自己实现的,流的使用也由它管理,C++并没有接收到回车符就刷新输入缓冲流一说。在输入缓冲区的内容被读取完之前(除\r\n等),它不会再提示用户作新的输入,所以表面上看起来,用户回车后它的内容也更新了,其实是它之前的内容已经被读完。
2、不存在了。输入流就像一个先进先出的字节队列,字节被读出后就被丢掉了。
3、向上面那位 Xuxu8511 说的(请见谅),用cin、get、getline、getchar、gets等都能获取输入流的数据,另外,getch、getche等不能获取输入流的数据。
4、cin>>i语句会先检查缓冲区有没有数据,如果没有它会提示用户输入,输入 "12 78” 回车后,这些字符会先送到输入缓冲区,这时缓冲区的内容为 "12 78 \r\n”。之后它会读缓冲区内容,因为i是int型,所以它遇到空格停止读,把12的值赋给i,并删除缓冲区的12。cin>>j也是类似。

输入流就是 定义的一快内存buffer
用户从CMD上面输入,其实就是对这块buffer进行写入
输出,就是对这块buffer取出
这个buffer就叫输入缓冲区
显然,如果无限制的输入,这块buffer就溢出了,就是出错了
溢出攻击就是这个原理了,把代码当成字符串写进这款buffer
等到它溢出,就可以进行很多操作了哦,呵呵