linux c/c++中getopt的使用

前言:有时候,我们的程序,需要接收命令行参数

但是一多起来的时候,会很乱。

有没有什么办法?能让我们按照格式来读入呢?

 

在linux(更不如确切的说是OSX),上面可以使用getopt()这么个库函数,每一次调用都会返回命令行中的下一个参数

 

这个库,包含在头文件unistd.h中

 

 

先来看下面的程序:

#include "stdio.h"
#include "stdlib.h"
#include "unistd.h"


int main(int argc, char *argv[])
{
	int index;
	char ch;
	while((ch = getopt(argc, argv, "dt:")) != EOF)
	{
		switch(ch)
		{
			case 'd':
				puts("enter d");
				break;
			case 't':
				puts("enter t");
				printf("optarg value is %s\n", optarg);
				break;
			default:
				return 1;
		}
	}

	argc -= optind;
	argv += optind;

	
	for(index = 0; index < argc; index++)
	{
		puts(argv[index]);
	}


	return 0;
}


简析一下这个程序的主要功能:

getopt(argc, argv,"dt:"))

他完成的意思是表示程序有一个-d和一个-t选项,但是你看-t后面还有一个冒号,表示-t参数后面,要跟着一个参数。


在-t参数被捕获的时候,则可以:

printf("optargvalue is %s\n", optarg);

这么样,用来得到-t后面的那个参数(其实是紧跟-t后面的字符串)

 

最末尾有两行这样的代码:

argc -= optind;
argv += optind;

他表示跳过已经读取的参数,比如跳过了-d、-t和-t后面的那个字符串

 

执行的时候:



也可以连着写



但是像这样的情况,就不行了


因为第二个不是-t,就已经进入switch的default了



当然,当需要-d和-t都接收参数的时候,可以把原来的语句,修改成getopt(argc, argv, "d:t:"))


  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值