main函数参数的解析及应用
来源:互联网 发布:java时间字符串格式化 编辑:程序博客网 时间:2024/06/08 07:21
我们平时在使用main函数的时候是很少注意main函数的参数,但实际上main函数是有参数的,main函数是由系统调用,在调用的同时传参。
main函数的参数原型:
int main(int argc,char*argv[],char*envp[])
argc 是 argument count的缩写,表示传入main函数的参数个数,包含第一个参数;
argv是argument vector的缩写,首先char*argv[]是一个数组,是一个存放字符指针的数组,每个指针指向一个字符串,这里指向的是main函数传入的参数;而且第一个函数argv[0]指向的是可执行程序名称,并且包含了程序所在的完整路径,所以我们输入的参数是argc-1个;
envp也是一个字符指针数组,数组的每个元素是指向环境变量的字符指针;
我们用一个程序来验证:
#include<stdio.h>#include<stdlib.h>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;}
我们现在在命令行参数输入两个参数
这个时候argc就有了三个参数,输出结果为
这个时候我们可以这样解释
这个时候应该特别注意 argv 最后一个元素存放的是空指针。
应用:
在这儿我们可以用main函数参数,实现一个最简单的计数器,第一个参数”-a”执行加法,“-s”执行减法,”-d”执行除法,”-m”执行乘法;后面两个参数为操作数。
#include<stdio.h>#include<stdlib.h>int Add(int a, int b){ return a + b;}int Sub(int a, int b){ return a - b;}int Mul(int a, int b){ return a * b;}int Div(int a, int b){ if (0 == b) { printf("错误,不能除以0 \n"); } return a / b;}int main(int argc,char*argv[],char*envp[]){ int ret = 0; //如果在传参的时候个数参数错了,就直接结束掉程序 if (argc != 4) { printf("参数错误\n"); system("pause"); return 0; } //switch case 语句 后面跟的必须是常量 不能是字符串 //所以我们必须找到-后面的字符 argv[1]指向的是argv这个数组第二行的地址,而第二行第二个字符就是我们需要的字符 switch (argv[1][1]) { //我们在输入参数的时候输入的是_a,_s,_m,_d字符串,但真正决定调用哪一个函数的是第二个字符,也就是a,s,m,d case 'a': //argv[2]存的是字符指针,我们传过去的参数应该是整形,所以用atoi这个函数把字符指针里面指向的字符串转化成整数数字 ret = Add(atoi(argv[2]), atoi(argv[3])); break; case 's': ret = Sub(atoi(argv[2]), atoi(argv[3])); break; case 'm': ret = Mul(atoi(argv[2]), atoi(argv[3])); break; case 'd': ret = Div(atoi(argv[2]), atoi(argv[3])); break; default: printf("输入错误\n"); break; } printf("%d\n", ret); system("pause"); return 0;}
我们在命令行参数输入-a 1 2得到结果为
阅读全文
1 0
- main函数参数的解析及应用
- main函数的参数解析
- C# main函数详解及参数应用
- C# main函数详解及参数应用
- C# main函数详解及参数应用
- main函数参数解析
- main函数参数解析
- main函数参数解析
- main函数参数解析
- Linux下main函数参数的解析
- c的Main函数参数解析
- main函数的参数
- main函数的参数
- Main 函数的参数
- main()函数的参数
- main函数的参数
- main函数的参数
- main函数的参数
- POJ2623 Sequence Median【中位数+排序】
- linux学习之邮件服务管理,postfix,dovecot,thunderbird,mysql
- Linux下使用iftop工具查看流量情况
- 11111
- spring事务注解不生效
- main函数参数的解析及应用
- Application Loader登陆失败原因
- iOS大型项目解耦方案有难度?BeeHive设计优化来帮助
- Dijkstra算法模板
- 华为FusionStage PaaS平台技术探秘之微服务运行与治理框架
- 数据库索引失效问题
- FPGA上电后IO的默认状态
- virtualbox ubuntu /home目录扩充容量
- ES6学习