C语言-----有参数的main函数

我们学习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指针。

打印出数组中的环境变量,如图:

截取部分:

每一行都是一个环境变量。



  • 34
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值