C语言 一个人如何确定所需的选项参数缺失



我在GNU/Linux机器上使用getopt_long。初始化选项列表为:

static struct option long_options[] = {
     {"mode", required_argument, 0, 9},
     {0, 0, 0, 0}
};

有以下代码行

c = getopt_long(argc, argv, "", long_options, index_ptr);

当我用命令

运行程序时:
prog --mode

上面显示的代码行返回'?'在c中,但不是':',根据getopt(3)手册页:"错误和-1返回与getopt()相同"

是的,当使用/解析短选项时,可以在选项列表中写入类似":m:"的东西,这样变量c的缺失参数将包含':',而不是'?',但是当解析只有长选项时,应该如何区分两种情况(缺少参数,无效选项)?

如何区分无效选项和缺少必要参数的选项?

要实现区分无效选项和缺少参数的有效选项的目标,我可以看到的唯一方法是将选项结构体的has_arg字段设置为optional_argument,然后手动测试参数。那么getopt_long()只会返回一个值'?'当有一个无效的选项时,你可以检查一个指定的选项是否有一个参数通过查看optarg。下面是一个例子:

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
int main(int argc, char *argv[])
{
    int i, opt;
    int index = -1;
    static struct option long_options[] = {
        {"mode", optional_argument, NULL, 'm'},
        {0, 0, 0, 0}
    };
    /* suppress error messages */
    //opterr = 0;
    while ((opt = getopt_long(argc, argv, "", long_options, &index)) != -1) {
        if (opt == '?') {
            /* do something, perhaps: */
            //printf("Invalid option n");
            //      exit(EXIT_FAILURE);
        }
        if (opt == 'm' && optarg == NULL) {
            printf("Missing argument in '--mode' optionn");
            exit(EXIT_FAILURE);
        }        
    }
    return 0;
}

最新更新