getopt使用示例

解析命令行参数曾经是个麻烦的事,看完下面的示例就不会再感觉麻烦了

 

getopt可以会把输入排序成【选项 选项 选项 参数 参数】这种格式

其中选项(即以-开头的选项,包括参数)出现的顺序不变,参数出现顺序不变
即:只是把选项和参数分开,通过optarg解析选项,使用optind获取参数

 

详见使用示例: 


  1. #include <stdio.h>
  2. #include <unistd.h>
  3. void usage(char *prg)
  4. {
  5.         printf("Show how 'getopt' works/n");
  6.         printf("usage: %s  [-a 1] [-b 2] [-c 3] [-d] arg1 arg2/n/n", prg);
  7.         printf("input whatever, eg: %s -a 1 arg2 -c 2 arg1 -b 3/n", prg);
  8. }
  9. int main(int argc, char **argv)
  10. {
  11.         if(argc < 3)
  12.         {
  13.                 usage(argv[0]);
  14.                 return -1;
  15.         }
  16.         
  17.         int c;
  18.         while ((c = getopt(argc, argv, ":a:b:c:d")) != -1)
  19.         // 第一个: 表示隐藏错误信息,输入 -s -d,和去掉第一个:,比较下输出就知道了
  20.         {
  21.                 switch (c)
  22.                 {
  23.                         case 'a':
  24.                                 //a = atoi(optarg); //使用optarg获取选项的值
  25.                                 break;
  26.                         case 'b':
  27.                                 //b = optarg
  28.                                 break;
  29.                         case 'c':
  30.                                 //c = strlen(optarg);
  31.                                 break;
  32.                         case 'd':
  33.                                 //d = true;
  34.                                 break;
  35.                         default:
  36.                                 usage(argv[0]);
  37.                                 //exit(0);
  38.                                 return 0;
  39.                 }
  40.         }
  41.         // arg1 = argv[optind];                // 通过optind范围参数
  42.         // arg2 = argv[optind+1];
  43.         
  44.         // getopt will reorder command line 
  45.         for(int i = 0; i < argc; i++)
  46.                 printf("%s ", argv[i])
  47.         printf("/n");
  48.         return 0;
  49. }

 

输入:

                       -a 1 arg2 -c 2 arg1 -b 3
getopt之后变成:

                       -a 1 -c 2 -b 3 arg2 arg1

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值