$hoho
a
b
abcd
$hoho | lala
segmentation fault
lala.c - >
#include<stdio.h>
int main(int argc, char* argv){
printf("%s\n", argv[1]);
...
}
然后,我如何使用std_input a,b和abcd
答案 0 :(得分:1)
在lala.c
中(我希望实际文件不是这样命名的),
printf("%s\n", argv[1]);
您使用argv[1]
而不检查其有效性。它很可能是NULL
或未经初始化或不存在。这会调用undefined behaviour。
因此,在使用argv[n]
之前,您必须始终使用
if (argc < (n+1))
//abort
else
//use upto argv[n]
除此之外,正如我的 @Iharob Al Asimi先生所指出的,char* argv
应为char* argv[]
或char ** argv
。 (我相信你的代码中更多的是拼写错误。)
答案 1 :(得分:1)
您的main()
签名错误。这不是
int main(int argc, char* argv)
它的
int main(int argc, char **argv)
或等效
int main(int argc, char *argv[])
您正在尝试使用char
说明符打印"%s"
,printf()
函数尝试读取字符串并将char
值解释为地址因为它期望一个char
指针,这会导致未定义的行为 1 ,从而导致问题。
1 请阅读@ SouravGhosh发布的链接以及他的答案,这也是一个很好的建议。
答案 2 :(得分:1)
在您的代码中,更改行
int main(int argc, char* argv){
到
int main(int argc, char *argv[]){
如果你想要多个争论,这将是有效的。然后在打印之前检查参数计数。所以替换以下行
printf("%s\n", argv[1]);
与
if(argc > 1)
printf("%s\n", argv[1]);