getopt处理命令行参数

函数说明

//函数原型,定义在<unistd.h>
int getopt(int argc, char * const argv[], const char *optstring);
//描述:getopt是用来解析命令行选项参数的,但是只能解析短选项: -d 100,不能解析长选项:--prefix

//参数:argc:main()函数传递过来的参数的个数
//argv:main()函数传递过来的参数的字符串指针数组
//optstring:选项字符串,告知 getopt()可以处理哪个选项以及哪个选项需要参数

//返回值:若选项成功找到,返回选项字母;如果所有命令行选项都解析完毕,返回-1;如果遇到字符串不在optstring里,返回字符'?'

optstring参数

char *optstring = “ab:c::”;
单个字符a         表示选项a没有参数            格式:-a即可,不加参数
单字符加冒号b:     表示选项b有且必须加参数      格式:-b 100或-b100,但-b=100错
单字符加2冒号c::   表示选项c可以有,也可以无     格式:-c200,其它格式错误

一些执行getopt生效的全局变量

optarg —— 指向当前选项参数(如果有)的指针。
optind —— 再次调用 getopt() 时的下一个 argv指针的索引。
optopt —— 最后一个未知选项。
opterr —— 如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。

其他

处理长选项参数,可以使用类似的函数:getopt_long

代码示例

#include<stdio.h>
#include<unistd.h>

int main(int argc,char* argv[]){
    int ret;
    while( (ret = getopt(argc, argv, "ab:c::")) != -1 ){  //一般处理方式为循环处理,直到返回值为-1
        switch (ret)
        {
        case 'a':
            printf("a=%s", optarg);
            printf("\t nextIndex=%d\n", optind);
            break;
        case 'b':
            printf("b=%s", optarg);
            printf("\t nextIndex=%d\n", optind);
            break;
        case 'c':
            printf("c=%s", optarg);
            printf("\t nextIndex=%d\n", optind);
            break;
        case '?':
        default:
            printf("default\n");
            break;
        }
    }
}
posted @ 2021-09-09 23:06  WuYunTaXue  阅读(57)  评论(0编辑  收藏  举报