getopt灵活性使空间也可以工作

时间:2018-02-28 04:59:21

标签: c

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>


int main(int argc, char **argv) {
    int o;
    int w = 10;

    while ((o = getopt(argc, argv, "w::")) != -1) {
        switch (o) {
            case 'w' :
                if (optarg) {
                    w = atoi(optarg);
                }
                break;
        }

    }
    printf("%d\n", w);
}

我想要这个工作

$ gcc -Wall theup.c
$ ./a.out -w 17
17

目前正在做这个

$ gcc -Wall theup.c
$ ./a.out -w 17
10

有没有办法用getopt做到这一点?它适用于大多数像-w17-w,但空间不起作用

1 个答案:

答案 0 :(得分:1)

使用::(不允许在选项后传递值)和空格,-w 17之间会有歧义,其中17将是选项的值, -w 17其中17是另一个参数,它解释了getopt要求在使用::时整理值

更糟糕的是,想想有其他选择的一般情况。 -w -x会做什么? getopt无法预测您在选择后需要一个号码。

我只想将getopt线更改为:

while ((o = getopt(argc, argv, "w:")) != -1) {

现在省略-w仍会提供10,因为该值是预先默认的。