我们学习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这个数组不为空的元素个数。
最后来解释一下最后一个参数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指针。
打印出数组中的环境变量,如图:
截取部分:
每一行都是一个环境变量。
————————————————
版权声明:本文为优快云博主「Li_xixi111」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/abc_xixi111/article/details/79993899