我们学习C语言的时候,用到的第一个函数应该就是main函数了吧,大多数情况下看到的都是没有参数的int main(void),今天我们来深入解析一下有参数并且带有三个参数的main函数。编译器为vs2013。
int main(int argc,char *argv[],char *envp[]) { int i = 0; for (i = 0; i < argc; i++) { printf("%s\n", argv[i]); } system("pause"); return 0; }
运行结果如下:当前可执行程序所在位置。
main函数的三个参数:
第一个参数 argc ,用于存放命令行参数的个数。
第二个参数 argv,是个字符指针的数组,每个元素都是一个字符指针,指向一个字符串,即命令行中的每一个参数。
第三个参数 envp ,也是一个字符指针的数组,这个数组的每一个元素是指向一个环境变量的字符指针。
在vs2013这个编译器下,选中解决方案ex7右击属性 命令参数在增加了命令行参数 旺财 狗蛋之后,屏幕打印结果如下图:
现在,我们在Windows系统下也运行一下,打开cmd,找到刚才我们所写的代码的Debug文件,输入参数,回车看结果
这个argc数组中总共有4个参数,下图解释:
接下来,我们看一个例题:
题目:使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
int Add(int x, int y) { return x + y; } int Sub(int x, int y) { return x - y; } int Mul(int x, int y) { return x * y; } int Div(int x, int y) { return x / y; } int main(int argc,char *argv[],char *envp[]) { int x = 0; int y = 0; int ret = 0; if (argc != 4) { printf("请检查参数个数"); return 0; } //判断-a -s -m -d中的哪一种 x = atoi(argv[2]); y = atoi(argv[3]); switch (*(argv[1] + 1)) { case 'a': //Add(*(argv[2]),*(argv[3]));错误,因为char* 类型 //atoi()函数 把字符串转换成整数 解决方案ex7右击属性 命令参数里加入-a 123 321 ret = Add(x, y); break; case 's': ret = Sub(x, y); break; case 'm': ret = Mul(x, y); break; case 'd': ret = Div(x, y); break; default: printf("参数有误\n"); break; } printf("%d\n", ret); system("pause"); return 0; }
结果如下:
argv数组中最后一个参数NULL,作为这个数组的结束标志。
argc表示的是argv这个数组不为空的元素个数。
argc表示的是argv这个数组不为空的元素个数。
最后来解释一下最后一个参数envp,存放环境变量的数组。
int main(int argc, char *argv[], char *envp[]) { int i = 0; while (envp[i] != NULL)//数组最后一个元素是NULL { printf("%s\n", envp[i]); i++; } system("pause"); return 0; }
envp数组的最后一个元素也时NULL指针。
打印出数组中的环境变量,如图:
截取部分:
每一行都是一个环境变量。