gpt4 book ai didi

C语言: buffer size, 为什么当输入超过缓冲区大小时仍然有效?

转载 作者:行者123 更新时间:2023-11-30 18:27:50 24 4
gpt4 key购买 nike

问题:为什么当输入超过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语言: buffer size, 为什么当输入超过缓冲区大小时仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52548762/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com