问题:为什么输入超过12个字符时,下面的程序仍然可以使用?谢谢。
背景:我正在做一个练习,该练习要求该功能读取不限数量的字符并打印出来,
我看到了这个解决方案(来自gitbook)

#include <stdio.h>
#include <assert.h>
#define BUF_SIZE 12

void good_echo(void)
{
    char buf[BUF_SIZE];
    while(1) {
        /* function fgets is interesting */
        char* p = fgets(buf, BUF_SIZE, stdin);
        if (p == NULL) {
            break;
        }
        printf("%s", p);
    }
    return;
}

int main(void)
{
    good_echo();
    return 0;
}

最佳答案

在这种情况下,fgets()一次最多读取11个字符(如果在填充11个字符之前存在换行符,则最多读取并包括换行符),添加一个空字节,然后返回。然后,您的打印代码将打印最多11个字符,而不添加换行符或其他任何内容。因此,所有数据都被读取并干净地回显。

将您的printf()更改为printf("[%s]\n", p);,您将看到它如何更清晰地工作。

关于c - C语言:缓冲区大小,为什么当输入大于缓冲区大小时仍然有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52548762/

10-11 21:24