gpt4 book ai didi

c - while循环中读入

转载 作者:行者123 更新时间:2023-11-30 14:43:00 27 4
gpt4 key购买 nike

我一直在尝试了解缓冲区和依赖它们的 I/O 函数,当我遇到这段代码时,乍一看似乎很直观,但是一旦我开始使用它,结果我得到的是意想不到的。

我使用 while 循环来 read() 标准输入中的每一行,并使用 printf() 打印出我读到的内容。经过几次输入后,打印输出开始变得奇怪,这看起来很奇怪,因为每次调用时 read() 都会覆盖目标缓冲区。

char line[256];
int n;

while((n = read(STDIN_FILENO, line, 256) > 0)
printf("%s", line);

在第三次拍摄(abcdefghj)时,printf 似乎开始混合结果。

abc
abc
abcdef
abcdef
abcdefghj
cdeabcdefghj

最佳答案

read 用于读取“原始字节”而不是字符串,这样它就不会以字符串终止符 \0 终止输入。如果将结果打印到控制台,如果运气好(或坏?),缓冲区已使用 0 初始化,这样您实际上会收到字符串输出。

但是,如果第二行比读入的第一行短,则将仅覆盖第一行内容的一部分,并将剩余部分与第二行一起再次打印出来。

写...

while (fgets(line, 256,STDIN_FILENO)) {
fputs(line,stdout);
...
}

一切都应该正常工作。

关于c - while循环中读入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54197556/

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