【发布时间】:2022-01-08 16:05:59
【问题描述】:
当我在管道左边放了一个无输出程序时,如:
// program a
int main() {
char s[255];
scanf("%s", s);
return 0;
}
还有一个右侧有输入输出的程序:
// program b
int main() {
char s[255];
scanf("%s", s);
for(char *c = s; *(c) != '\0'; c++) printf("%d ", *c);
return 0;
}
当我尝试用管道连接它们时:
$ ./a | ./b
不管输入是什么,我的电脑里总是得到两个ASCII码:64 & 3,即使我知道'a'没有输出。
我想知道这是因为我的程序,还是因为 shell,还是因为管道,或者其他什么...
【问题讨论】:
-
在执行
scanf之前,您是否尝试将s初始化为全零(可能最容易通过编写static char s[255];来完成? -
@user1934428 谢谢!!!有用!非常简单但无法检测到的错误:(
-
如果你曾经在真实的应用程序中尝试过这样的事情,请永远不要以这种方式使用
scanf,否则你将在下一次代码审查中被烤...
标签: linux shell pipe stdout stdin