带参数的main函数---命令行参数

执行程序时,可以从命令行传值给C程序。这些值被称为命令行参数,特别是想从外部控制程序,不是通过在代码内对这些值进行硬编码时,而是通过参数来控制代码部分逻辑。

1. main函数传参的意义

代码实例:

#include<stdio.h>

int main(int argc, char **argv)
{
	int i;

	printf("Total %d arguments\n", argc);
	for(i = 0; i < argc; i++)
	{
		printf("%s\n", argv[i]);
	}

	return 0;
}

argc: 参数的个数,不给main()函数传递参数时默认值为1,即至少有一个参数为该可执行文件的文件名(含目录)。

argv: 为指针数组,分别指向各个字符串参数的首地址,其中argv[0]存储的是可执行文件的文件名的首地址。

运行结果:

$ ./test 1 2 3 adbd 
Total 5 arguments
./test
1
2
3
adbd

2. 通过关键字传参,例如无顺序同时-v查看版本-h帮助

理解第一步,就能在实际应用中加入-v(参数)实现传递多参数,下面优点灵活、无顺序,只是按照关键字来传递参数。

2.1 代码实例

#include<stdio.h>

int main(int argc, char **argv)
{
	int flags = 0;

	while (1 + flags < argc)
	{
		if(argv[1+flags][0] == '-')
		{
			switch (argv[1+flags][1])
			{
			case 'a':
				printf("%s: %s\n", argv[1+flags], argv[2+flags]); 
				break;
			case 'b':
				printf("%s: %s\n", argv[1+flags], argv[2+flags]);//argv[2+flags]需要传递进来的参数
				break;
			case 'c':
				printf("%s: %s\n", argv[1+flags], argv[2+flags]);
				break;
			case 'd':
				printf("%s: %s\n", argv[1+flags], argv[2+flags]);
				break;
			case 'v':
				printf("Test version 1.0\n");
				return 0;
			case 'h':
			case 'H':
				printf("test [-a] [-b] [-c] [-d] [-v] [-h]\n");
				break;
			default:
				break;
			}
		}
		flags++;
	}

	return 0;
}

2.2 通过命令行参数多个传参

运行结果如下:

$ ./test -a 123 -b 456 -c adc -d def
-a: 123
-b: 456
-c: adc
-d: def
$ ./test -b 115200
-b: 115200

$ ./test -d /dev/ttyUSB0 -b 115200
-d: /dev/ttyUSB0
-b: 115200

如上面的例子, -b用来识别此项 设置是波特率,后面的115200是设置的波特率;-d用来识别此项 设置是串口的设备节点,后面的/dev/ttyUSB0是串口的设备节点,这样就能实现命令行参数。

2.3 通过命令行参数查看版本

运行结果如下:

$ ./test -v
Test version 1.0

2.4 通过命令行参数查看帮助

运行结果如下:

$ ./test -H
test [-a] [-b] [-c] [-d] [-v] [-h]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sorry0619

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值