6. main 函数的参数列表

main 函数的参数列表 用于接收命令行传入的字符串数据,通常是选项、参数等信息。

在 MacOS 和 Linux 系统中,常用的 main 函数的标准写法如下:

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

前面我们学过,main 函数的返回值表示该程序作为命令的返回值。这节课我们来学习 main 函数的形参列表。

它的形参列表的含义如下:

假设我们写的程序 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