C中的命令行参数导致分段错误?

时间:2015-01-18 12:36:16

标签: java c string segmentation-fault command-line-arguments

我想写一个简单的程序来打印我们传递给它的命令行参数

我通常使用Java编程,完全可以编写

public class cmdargs
{
public static void main(String[] args)
{
if(args.length>0)
System.out.println(args[0]);
}
}//class ends

现在C String中最接近char[]的是char name[]或更确切地说#include<stdio.h> int main(char args[]) { printf("%s",args); return 0; }

所以我写的时候

./cmdargs hi
Segmentation fault (core dumped)

为什么我会遇到分段错误?

{{1}}

1 个答案:

答案 0 :(得分:2)

这是因为这个签名错了

int main(char args[])

在c中,参数的数量作为第一个参数传递,参数作为指针数组传递,因此正确的签名应为

int main(int argc, char *argv[])

然后您可以访问这些值,例如

int i;

for (i = 0 ; i < argc ; ++i)
    printf("%s\n", argv[i]);

请启用编译器警告,以防止编译此类程序。