在 C 语言中,对于 main 函数的写法分两种:一种 main 函数是不带参数的,另一种是带有参数的。
一个简单的不带参数的 main 函数,如下所示:
1
2
3
4
5
|
#include <stido.h>
int main(){
return 0;
}
|
另一种带有参数的 main 函数,如下所示:
1
2
3
4
5
|
#include <stido.h>
int main(int argc, char *argv[]){
return 0;
}
|
虽然它们输出的结果相同,但argc
和argv
到底是什么东西呢?
我们可以增加一条语句,让其输出argc
,如下所示:
1
2
3
4
5
6
|
#include <stido.h>
int main(int argc, char *argv[]){
printf("argc= %d\n", argc);
return 0;
}
|
写好以后,在 Linux 环境下(其他环境也可以)用gcc
进行编译,然后执行文件,如下所示:
1
2
3
4
|
[root@carol home]# gcc test.c -o test
[root@carol home]# ./test
argc = 1
[root@carol home]#
|
可以看到输出了argc = 1
,然后我们在./test
后面多加几个字符,用空格隔开,再看看输出结果,如下所示:
1
2
3
4
5
6
7
8
9
|
[root@carol home]# ./test abc
argc = 2
[root@carol home]# ./test abc def
argc = 3
[root@carol home]# ./test abc def ghi
argc = 4
[root@carol home]# ./test abc def ghi 12312321
argc = 5
[root@carol home]#
|
我们可以看到,根据命令行参数的不同,结果打印出不同的参数数量。所以,整型变量argc
表示命令行中参数的个数,其中./test
本身也是算一个参数,当我们在命令行中输入不同的实参后,即可把这些实参传送到 main 函数的形参argc
中。
argc 即 argument count,表示参数的数量。
好,第一个参数知道了,现在来看看第二个参数argv
。
*argv[]
表示指向指针的数组,因为它前面有个char
,共同组成了char *argv[]
,所以它是指向字符串的指针数组。也可以将它写成char **argv
。
argv 即 argument vector,表示参数的向量。
前面我们在命令行输入的许多参数其实是保存在了argv
数组当中,我们可以添加几条语句将其打印出来,如下所示:
1
2
3
4
5
6
7
8
9
10
|
#include <stdio.h>
int main(int argc, char *argv[]){
int i;
printf("argc = %d\n", argc);
for(i=0;i<argc;i++){
printf("%s\n", argv[i]);
}
return 0;
}
|
重新编译后给它不同参数,然后执行文件,其输出结果如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
[root@carol home]# gcc test.c -o test
[root@carol home]# ./test
argc = 1
./test
[root@carol home]# ./test abc
argc = 2
./test
abc
[root@carol home]# ./test abc def
argc = 3
./test
abc
def
[root@carol home]# ./test abc def ghi
argc = 4
./test
abc
def
ghi
[root@carol home]# ./test abc def ghi 21212
argc = 5
./test
abc
def
ghi
21212
[root@carol home]#
|
可以看到被存在argv
数组中的值被打印出来了。
总结一下:argc
是命令行参数的个数,argv
指向一个指针数组的首元素,数组中每个元素都是char *
指针,指向整个命令行参数字符串。