getopt()函数解析命令行选项参数

#include <unistd.h>
    
    extern char *optarg;//当前选项的参数指针
    extern int optind;//下次再次调用getopt时,从optind存储的位置重新可是检查选项
    
    extern int opterr;//当opterr = 0时,getopt不向stderr输出错误信息.
    extern int optopt;//当命令行选项字符不包括在optstring中或者选项缺少必要的参数时,该选项存储在optopt中,getopt返回.

主要是介绍optargoptind

int getopt(int argc,char *const argv[],const char *optstring);

使用以上函数得到文件test.c

/*test.c*/
#include <stdio.h>
#include <unistd.h>

int main(int argc,char **argv)
{
        int ch = 0, i = 0;
        while((ch = getopt(argc,argv,"ab:c:de::"))!=-1)
        {
                printf("----------\n");
                printf("ch = %c\n",ch);
                printf("optind:%d\n",optind);
                printf("optarg=%s\n",optarg);
                printf("----------\n");
        }

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

“ab:c:de::” b:说明选项-b后有参数,c:说明选项-c后有参数,e::说明-e与参数之间没有空格。

a与d后面既没有:也没有::说明是这两个选项的后面是不应该有参数的。

当我按照每个选项后都加入参数(这么做当然是错误的)后发现,argv中发生了排序。

那些不应该有参数的选项(例如-a -d)和参数形式错误的参数(例如 -e的参数应该是-eee 但是我中间加入了空格变成了-e ee)以及错误的参数(./test 后的111)后的参数位置都发生了改变。都按照一定的顺序排到了最后.而第一个排到///最后的那个坐标while()循环结束后的optind中保存

这样由于用户输入错误导致的选项与参数顺序问题就解决了

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值