getopt、getopt_long 函数说明

本文详细介绍了C语言中的getopt和getopt_long函数,用于解析命令行选项参数。getopt主要用于处理短选项,而getopt_long支持长选项。文章通过实例解释了两个函数的使用方法,包括参数说明、返回值以及如何处理选项和参数。同时,还讲解了structoption结构体在getopt_long中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

getopt、getopt_long函数说明

getopt函数

1. 定义:
int getopt(int argc, char * const argv[], const char *optstring);
2. 描述:

getopt是用来解析命令行选项参数的,但是只能解析短选项: -d 100,不能解析长选项:–prefix

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

3. 返回值:

如果选项成功找到,返回选项字母;如果所有命令行选项都解析完毕,返回 -1;如果遇到选项字符不在 optstring 中,返回字符 ‘?’;如果遇到丢失参数,那么返回值依赖于 optstring 中第一个字符,如果第一个字符是 ‘:’ 则返回’:‘,否则返回’?'并提示出错误信息。

optstring是一个包含合法选项字符的字符串。如果这样的字符后跟冒号,则该选项需要一个参数。

4. 例子:

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

上面这个 optstring 在传入之后,getopt 函数将依次检查命令行是否指定了 -a, -b, -c(这需要多次调用 getopt 函数,直到其返回-1),当检查到上面某一个参数被指定时,函数会返回被指定的参数名称(即该字母)

optarg —— 指向当前选项有参数值,则是指向参数值的指针。
optind —— argv中待处理的下一个元素的索引。系统将此值初始化为 1。调用者可以将其重置为 1 以重新开始扫描相同的argv
optopt —— 最后一个未知选项。
opterr ­—— 如果不希望getopt()打印出错信息,则只要将全域变量opterr设为0即可。
默认情况下,getopt () 会在扫描时置换argv的内容,以便最终所有非选项都位于末尾。

如果getopt () 不能识别选项字符,它会向stderr打印一条错误消息,将字符存储在optopt中,并返回“?”。

getopt_long () 函数

1. 定义:
int getopt_long(int argc, char * const argv[],
           const char *optstring,
           const struct option *longopts, int *longindex);
2. 描述:

getopt_long () 函数的工作方式与getopt () 类似,只是它也接受长选项,以两个破折号开头。如果缩写是唯一的或与某些定义的选项完全匹配,则可以缩写长选项名称。长选项可以采用–arg=param或–arg param形式的参数。

longopts是指向< getopt.h >中 声明的struct option 数组的第一个元素的指针

数组的最后一个元素必须用零填充。

struct option {
    const char *name;   // 参数名称
    int        has_arg; // 指明是否带有参数
    int        *flag;   // flag=NULL时,返回value;不为空时,*flag=val,返回0
    int        val;     // 用于指定函数找到选项的返回值或flag非空时指定*flag的值
}; 

选项结构里面指明了一个长参数的名称和相关属性。

其中 has_arg 指明是否带参数值,其数值可选:

no_argument 表明长选项不带参数,如:–name, --help

required_argument 表明长选项必须带参数,如:–prefix /root或 --prefix=/root optional_argument 表明长选项的参数是可选的,如:–help或 –prefix=/root,其它都是错误

longindex 如果longindex非空,它指向的变量将记录当前找到参数符合longopts里的第几个元素的描述,即是longopts的下标值

3. 返回值:

对于短选项,返回值同getopt函数;对于长选项,如果flag是NULL,返回val,否则返回0;对于错误情况返回值同getopt函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值