【发布时间】:2012-09-21 08:39:55
【问题描述】:
执行以下 C 代码
#include <stdio.h>
int main(int argc, char **argv) {
char stdinput[10];
while (1) {
fgets(stdinput, 10, stdin);
fputs(stdinput, stdout);
}
}
产生:
通过控制台:
./a.out
input
input
然后它等待更多输入。也就是说,它将标准输入回显到标准输出,类似于cat。
通过管道:
echo input | ./a.out
input
input
input
[...]
启动后,它会自行淹没控制台,无需交互。
这个示例程序正是我用于测试的程序;这不是削减。 我希望这两个测试的行为方式相同。发生了什么事?
【问题讨论】:
-
再一次完美地证明了为什么没有保护的输入操作总是错误的......你必须永远忽略输入操作的结果。