我正在研究K&R的“C编程语言”,而示例1.5让我很困惑:

#include <stdio.h>

/* copy input to output; 1st version */
int main(int argc, char *argv[])
{
    int c;

    while ((c = getchar()) != EOF)
        putchar(c);

    return 0;
}

我了解到,“getchar()”使用一个字符作为“putchar()”来显示。但是,当我在终端中运行程序时,为什么可以传递整行字符供'putchar()'显示?

最佳答案

因为您的终端是行缓冲的。 getchar()putchar()仍然仅适用于单个字符,但是终端会等待将字符提交给程序,直到您输入了整行为止。然后getchar()一对一地从该缓冲区中获取字符,并且putchar()一对一地显示它们。

添加:终端是行缓冲的,这意味着当遇到换行符时,它将输入提交给程序。通常一次提交数据块而不是一个字符更为有效。它还为用户提供了在按Enter之前编辑该行的机会。

注意:可以通过禁用canonical mode for the terminal并在NULL上使用stdin调用setbuf来关闭行缓冲。

关于c - getchar()和putchar()函数背后的理论,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17552458/

10-12 02:14