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

Command line argument in C causing segmentaion fault?

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

我通常在 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)

因为这个签名是错误的

int main(char args[])

在c中,参数个数作为第一个参数传递,参数作为指针数组传递,所以正确的签名应该是

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

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

int i;

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

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