给定stdin缓冲区中的输入,在执行对getchar()的连续调用时,指针是否沿着stdin缓冲区的内存地址移动,允许getchar()在每个地址检索值?如果是的话,一旦检索到它们,值是否被移除,指针就会增加?
通常,我对循环中getchar()的理解遵循以下逻辑:
以前在stackoverflow上也问过一个类似的问题,但我很难理解答案。
发布于 2014-07-27 15:54:18
通常有一个stdio内部缓冲区。getchar()可能触发读入缓冲区的一行,通常在随后的调用中,它只会增加一个指针,直到指针到达缓冲区中当前数据的末尾。实现通常对一个底层的动态内存块使用一个简单的内部char *,其中有几个指针和状态变量。
实现各不相同,我不记得POSIX标准在一般情况下暗示了getchar()或stdio流的内部实现,只是应该支持给定的操作。
如果我还记得,有些实现是未缓冲的(我认为我使用的DOS编译器没有缓冲),但是对于给定的操作系统有多个标准的lib实现。
在同一个系统上有两个stdio库并不少见,例如:管理AIX、Solaris、HPUX和其他非Linux/BSD UNIX平台的system将经常安装GNU堆栈以获得像gcc这样的工具,该堆栈包括glibc (GNU LIBC)。
您可以在线下载libc/stdio源。见格利伯。
如果有帮助,请考虑stdio提供了peek和unget功能,唯一的方法是在终端和用户程序之间设置内部缓冲区。
https://stackoverflow.com/questions/24982311
复制相似问题