6. main 函数的参数列表
main 函数的参数列表 用于接收命令行传入的字符串数据,通常是选项、参数等信息。
在 MacOS 和 Linux 系统中,常用的 main 函数的标准写法如下:
int main(int argc, char * argv[]) {
}
前面我们学过,main 函数的返回值表示该程序作为命令的返回值。这节课我们来学习 main 函数的形参列表。
它的形参列表的含义如下:
- argc 的值是 Shell 命令行参数的个数。
- argv 是指向 Shell 命令行参数的数组的指针,该指针指向字符型指针数组的起始位置。
假设我们写的程序 test_argv.c 编译后为 test_argv,在运行时传入如下的命令行参数。
./test_argv abc 123 ABC
则此时的 argc 的值为 4。此时形参变量 argv 为指向一维数组的指针。此一维数组的数据元素的个数是 argc+1 个,数组内各个数据元素的类型为字符型指针,值分别指向各个命令行参数,最后一个指针为空指针。如下图所示:
+------+
argv ---> [0] | | ---> "./test_argv"
+------+
[1] | | ---> "abc"
+------+
[2] | | ---> "123"
+------+
[3] | | ---> "ABC"
+------+
[4] | NULL |
+------+
示例:
运行时打印命令行参数
// filename: test_argv.c
#include <stdio.h>
int main(int argc, char * argv[]) {
int i;
printf("argc: %d\n", argc);
for (i = 0; i < argc; i++) {
printf("argv[%d]: %s\n", i, argv[i]);
}
return 0;
}
编译和运行结果如下:
weimingze@mzstudio:~$ gcc -o test_argv test_argv.c
weimingze@mzstudio:~$ ./test_argv
argc: 1
argv[0]: ./test_argv
weimingze@mzstudio:~$ ./test_argv abc 123 ABC
argc: 4
argv[0]: ./test_argv
argv[1]: abc
argv[2]: 123
argv[3]: ABC
可见 执行命令 ./test_argv 和 ./test_argv abc 123 ABC 时,main 函数的形参的 argc 的值不同,argv 指向的数组的内容也不相同。
练习:
写一个程序 myadd.c 并生成可执行程序 myadd,传入的命令行参数必须为 3 个,第一个为命令,第二个和第三个参数为数字。如果参数个数不是 3 个则提示如下信息。
weimingze@mzstudio:~$ ./myadd
USAGE:
./myadd number1 number2
如果参数个数位正好为 3 个,则计算 第二个和第三个参数的和并打印结果,如:
weimingze@mzstudio:~$ ./myadd 123 456
579
上述程序计算两个参数 123 + 456 的和是 579。