Fork me on GitHub

浅析(命令行参数 )&&(main函数参数)


前言

命令行参数:

● 命令行参数是控制命令执行的一种方式。

● 命令行参数类似于函数的参数,只是命令行参数是传送给命令的。命令执行时,内核已经将命令行参数放入命令的栈中,命令执行时则可以获取命令行参数,解析,执行。

● 命令行参数使命令可以执行不同任务。

linux系统下的实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>    

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

{
printf("%d\n",argc);

printf("%s\n",argv[0]);

printf("%s\n",argv[1]);

printf("%s\n",argv[2]);
}

在这个例子中,我们给main函数传递两个参数:argc,argv:

● argc是int类型的,它表示的是命令行参数的个数。不许要用户传递,它会根据用户从命令行输入的参数个数,自动确定。

● argv是char* argv[]类型的,即是指针数组类型,它的作用是存储用户从命令行传递进来的参数。它的第一个成员是程序执行的.exe文件。

● main函数还有一个参数是envp,是一个 指针数组类型,每个元素存储指向一个环境变量的字符指针。这里不予赘述。

对于上面的例子,我们将其保存为test.c,用gcc编译生成目标文件为a.out

编译结果如下

图片加载中
执行结果如下

图片加载中

这里第一个输出的是argc,因为我们只输入了./a.out,所以argc为1,即只有一个命令行参数。后面输出的第一个命令行参数也是./a.out。接着程序就出错了,因为程序要说输出第二、第三参数,而后面已经没有第二个和第三个参数了,在写实际的应用时,应注意对这一部分进行容错处理。所谓容错处理就是指软件运行时,能对由非正常因素引起的运行错误给出适当的处理或信息提示,使软件运行正常结束。而这个错误也就是程序员很容易犯得段错误

当在命令行输入./a.out、linux、nihao三个参数时,执行结果如图:

图片加载中
命令行参数个数为3,第一个参数./a.out、第二个参数linux、第三个参数nihao。

当输入./a.out、”linux nihao”、hehe、”hi apple”四个参数时,执行结果如图:

图片加载中
当输入四个参数,命令行参数个数就为4,但需要注意的是就是如果一个参数之间有空格,需要用双引号引起来,以免产生不必要的错误。

当然对于具体情况请看下图

图片加载中

结语

对于main函数第二个参数argv,其数据类型可以写成三种形式:
char *argv[]、char **argv、char argv[][],当然第三个函数参数envp同理。

-------------本文结束感谢您的阅读-------------