命令行参数是使用main()函数参数来处理的,其中,argc是指传入参数的个数,argv[]是一个指针数组,指向传递给程序的每个参数。
main 函数作为应用程序的入口,在头文件“#include”中。
main 函数需要传参数的时候完整的定义为
int main(int argc,char **argv)
参数 argc,表示参数的个数
参数**argv,存储输入字符的数组
argv[0]表示程序名称
argv[1]——argv[n]输入的参数
不传参数的时候定义为
int main(void)
函数 main 的返回值为类型为 int,用于判断程序执行成功还是失败
应当指出的是,argv[0]存储程序的名称,argv[1]是一个指向第一个命令行参数的指针,*argv[n]是最后一个参数。如果没有提供任何参数,argc 将为1,否则,如果传递了一个参数,argc将被设置为2。
多个命令行参数之间用空格分隔,但是如果参数本身带有空格,那么传递参数的时候应把参数放置在双引号或单引号内部。
1 #include 2
3 int main(int argc, char *argv[]) {
4 if (argc == 2) {
5 printf("The argument supplied is %s\n", argv[1]);
6 } else if (argc > 2) {
7 printf("Too many arguments supplied.\n");
8 } else {
9 printf("One argument expected.\n");
10 }
11 }
Result:
[xxxxx]$ ./Test.o One argument expected.
[xxxxx]$ ./Test.o a The argument supplied is a
[xxxxx]$ ./Test.o a b Too many arguments supplied.
[xxxxx]$ ./Test.o "a b" The argument supplied is a b
嵌入式系统中的一个例子:
编写简单的 argvc.c 文件测试 main 函数。
如上图所示,将输入的参数第一个和第二个转换成 int 类型,赋值给 i 和 j,最后输出打印。其中 argv[0]为程序名称,这里就是后面要编译的目标文件“argvc”。
编译运行测试
在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/”,使用命令“mkdir charcontrol”新建 charcontrol 文件夹,将源码 argvc.c 拷贝进去,进入新建的文件夹 charcontrol,如下图所示。
使用命令“arm-none-linux-gnueabi-gcc -o argvc argvc.c -static”编译 argvc 文件,如下图所示,使用命令“ls”可以看到生成了 argvc 可执行文件。
将编译成的可执行文件 argvc,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序如下。
如上图所示,程序成功运行,打印:the Program name is ./mnt/udisk/argvc。因为运行的程序就是“./mnt/udisk/argvc”,这是第一个参数,The command line has 2 argument:10,11。输入的参数是 10 和 11,对应 argv[1]和 argv[2]。