C 语言 命令行参数
在运行程序时,我们可以通过命令行传值给 C 程序,这些值被称为 命令行参数。
命令行参数 对程序而言是非常重要,特别是我们想从外部控制程序,而不是在代码内对这些值进行硬编码时,就显得尤为重要了。
C 语言程序通过 main()
函数的参数来处理命令行参数,其中,
- argc 是指传入参数的个数
- argv[] 是一个指针数组,指向传递给程序的每个参数
我们来看一个简单的范例
下面这个范例检查命令行是否有提供参数,并根据参数执行相应的动作
/** * file: main.c * author: 简单教程(www.twle.cn) */ #include <stdio.h> int main( int argc, char *argv[] ) { printf("你传递了 %d 个命令行参数\n", argc); printf("它们分别是:\n"); for( int i = 0; i < argc; i++ ) { printf("%s, ",argv[i]); } printf("\n"); }
编译和运行以上程序,当使用一个参数时,输出结果如下:
$ gcc main.c && a.out www.twle.cn 你传递了 2 个命令行参数 它们分别是: a.out, www.twle.cn,
a.out 其实也是一个参数,是第一个参数
传递两个值给 a.out
时输出结果如下
$ gcc main.c && a.out Love www.twle.cn 你传递了 3 个命令行参数 它们分别是: a.out, Love, www.twle.cn,
不传递任何值给 a.out
时输出结果如下:
$ gcc main.c && a.out 你传递了 1 个命令行参数 它们分别是: a.out,
注意
-
argv[0] 存储程序的名称
-
argv[1] 是一个指向第一个命令行参数的指针,
-
argv[n] 是最后一个参数。
-
如果没有提供任何参数,argc 将为 1,否则,如果传递了一个参数,argc 将被设置为 2
-
多个命令行参数之间用空格分隔,但是如果参数本身带有空格, 那么传递参数的时候应把参数放置在双引号 "" 或单引号 '' 内部。
让我们使用一个用空格分隔的简单参数,参数括在双引号中传递给 a.out
输出结果如下
$ gcc main.c && a.out "I Love www.twle.cn" 你传递了 2 个命令行参数 它们分别是: a.out, I Love www.twle.cn,
而如果没有使用双引号,则输出结果如下
$ gcc main.c && a.out I Love www.twle.cn 你传递了 4 个命令行参数 它们分别是: a.out, I, Love, www.twle.cn,