【发布时间】:2015-12-20 15:18:19
【问题描述】:
我正在做一些从标准输入读取并在标准输出中写入的测试,有些事情真的让我很困扰。
当我尝试写一个单个字符后跟一个 \n 时,EOF 中的“D”(我认为)在字符之后打印。
这是终端中发生的事情:
>./myprog
sometext I enter
"Ctrl + D"
jD
j
>
这里是代码:
#define BUF_SIZE 4096
void read_std_in()
{
int ret;
char buf[BUF_SIZE + 1];
while ((ret = read(0, buf, BUF_SIZE)))
{
buf[ret] = '\0';
// Concatenating buffer with some other string, not important here.
}
write(1, "j", 1);
write(1, "\n", 1);
write(1, "j", 1);
write(1, "\n", 1);
}
如您所见,第一个“j”不知从何得到一个“D”。
如果我尝试为 forst 行显示超过 1 个字符,则不会出现问题:
>./myprog
sometext I enter
"Ctrl + D"
jj
j
>
如果我没有输入字符(只是 \n),我会得到:
>./myprog
sometext I enter
"Ctrl + D"
^D
j
>
如何避免这种行为?
【问题讨论】:
-
请问
BUF_SIZE是什么? -
@alk 我使用 4096。我将编辑我的帖子。
-
您使用的是哪种 UNIX/C 实现?
-
我正在使用 OS X/??。如何知道 C-Implementation?
-
C 实现是指编译器和使用的 libc。