getopt_long_only解析带多个参数值和对optind的个人理解

首先感谢:http://blog.csdn.net/chaoyue1216/article/details/7329788里面的说,对函数有个基本的了解;

然后说明下optind使用过程中的个人理解:

1、在正确情况下,也就是说输出的参数和参数值都按要求的情况,optindx在调用getopt_long_only函数后会保存下一个参数的位置;

比如: r -I 210 -sp 110  -lt 120;在获取-sp值的时候optindx = 5;

2、但是有时候可能输入的参数不按要求:

比如:r -I 210 -sp 110 121 -lt 120;由于-sp带的参数值有多个(正常情况只能带一个参数值);这时获取到的optind=5,也就是说,会指向到下一个非选项的参数值121;

这样如果用optind作为参考值,获取多个参数可能会有问题;

3、argv中的值顺序发生变化是在参数都遍历完后,退出之后才会变化,而optind最后会指向到非选项的参数值121,这时optind=7;

4、这样的话,要实现获取多个参数值,我的处理方式是:

比如: r -I 210 -sp 110 121 -lt 120

       保存对应的上一个参数获取到参数值对应的偏移值,比如获取到210 的时候iLastIndex = 2后加1;

然后遍历到-sp,获取对应的偏移值iIndex = iLastIndex +1;

这样就知道对应的下一个参数的偏移值;

5、个人的处理方式,有更简单的,欢迎吐槽,一起交流,谢谢!


`getopt_long`函数是Unix/Linux系统编程中常用的命令行选项处理工具库函数,它通常用于解析程序从标准输入或命令行接收的参数。当你调用`getopt_long`时,它会遍历用户提供的参数,并检查是否匹配预定义的选项标志。 `getopt_long`的返回值是一个整数,这个数值代表了当前解析到的选项状态。具体的值可以对应以下几个情况: 1. 当遇到有效的长选项(如`--option=value`),返回的是该选项对应的数字常量(例如 `-O1` 的常量可能会返回 `1`),同时将剩余的选项存储在全局变量中(如` optarg`)。 2. 如果遇到短选项(如 `-o` 后跟字符),返回的是该字符本身作为ASCII码。 3. 如果遇到未指定参数(`--option` 而没有 `value`),返回 `-1` 或相应的长选项常量。 4. 当达到参数结束或遇到错误(如非法的选项或格式错误),`getopt_long`返回 `-1`,此时可以检查`errno`获取错误信息。 要获取每个参数选项的具体值,你需要在调用`getopt_long`之后检查返回值,并处理相应的逻辑。例如: ```c int opt; while ((opt = getopt_long(argc, argv, "long-opt short-opt:", long_options, &index)) != -1) { switch (opt) { case 'l': // 长选项 l,处理其值... break; case 's': // 短选项 s,处理其值... break; default: // 错误或未知选项... break; } } ``` 这里`long_options`是一个结构数组,包含了所有长选项及其对应的值,`index`则用于记录处理过的选项索引。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值