【发布时间】:2018-07-21 17:05:39
【问题描述】:
已编辑
输入流和输入缓冲区
据我了解,当在键盘上按下某个键时,字符会进入输入流 (stdin) 并存储在缓冲区中。然后scanf(在C的情况下)或cin(在C++的情况下)从缓冲区中提取字符并将其放入主内存中。
输出流和输出缓冲区
同样,在屏幕上显示字符之前,它们首先存储在缓冲区中。然后 printf(在 C 的情况下)或 cout(在 C++ 的情况下)从缓冲区中提取字符(当它已满时)并将其发送到输出(stdout)流。
我说的对吗?我已经坚持了很长一段时间了,我的逻辑可能有缺陷。
【问题讨论】:
-
在抽象意义上,流是输入数据的任何连续源或输出数据的通道。流不一定是缓冲的(例如 GPIO 引脚上的模拟传感器),并且缓冲区只是可能与流没有任何关系的数据块(例如位图的光栅缓冲区)。 C++ 的 std 中的 Streams 类型也不一定是缓冲的。
-
C 和 C++ 标准库使用的流基本上是正确的。
-
@Dai 标准输入输出流被缓冲。
-
我有点困惑。例如,人们建议在将字符串作为输入时使用 fgets() 函数而不是 gets() 函数,因为 gets() 可能会导致输入缓冲区溢出。在这种情况下缓冲区是什么意思?
-
在此上下文中,它表示
fgets和gets读入的char数组-fgets提供了一种控制在数组中放置多少字符的方法,@987654325 @ 没有(并且是一个已弃用的函数)。