Fork me on GitHub

main函数参数

参考:Where Does GCC Look to Find its Header Files?

 

命令行参数 VS 程序参数

./a.out 1 2 3 4 5 6

1 2 3 4 5 6是程序参数,是传给a.out这个程序处理的,main里面的argv来接收

./a.out 1 2 3 4 5 6完整的这一串才是命令行参数

代码演示

如下代码使用两种方式输出命令行参数

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 
 5 int main(int argc, char **argv)
 6 {
 7     int i=0;
 8     for(i=0;i<argc;++i)
 9     {
10         printf("%s ", argv[i]);
11     }
12     printf("\n");
13     for(i=0;argv[i]!=NULL;i++)
14     {
15         printf("%s ", argv[i]);
16     }
17     printf("\n");
18     return 0;
19 }
View Code

执行结果

[root@localhost ~]# gcc hello.c 
[root@localhost ~]# ./a.out 1 2 3 4 5 6
./a.out 1 2 3 4 5 6 
./a.out 1 2 3 4 5 6 
View Code

将命令行参数传递给main函数形参的过程

main函数的第三个参数

很多人只知道main有2个参数,即argc,argv。实际上还有第三个参数environ

environ是个全局变量,与main函数的argv一样,指向的都是一个字符串指针数组。只不过,argv: 与命令行参数有关;environ:与环境变量表有关。

打印环境变量代码1,借助全局变量

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 
 5 extern char **environ;
 6 int main(int argc, char **argv)
 7 {
 8     int i=0;
 9     
10     for(i=0;environ[i]!=NULL;i++)
11     {
12         printf("%s\n", environ[i]);
13     }
14     return 0;
15 }
View Code

打印环境变量代码2,借助main的第三个参数

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <unistd.h>
 4 
 5 int main(int argc, char **argv,char **environ)
 6 {
 7     int i=0;
 8     
 9     for(i=0;environ[i]!=NULL;i++)
10     {
11         printf("%s\n", environ[i]);
12     }
13     return 0;
14 }
View Code

 

 

posted @ 2018-09-22 16:20  克拉默与矩阵  阅读(237)  评论(0编辑  收藏  举报