#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,但空间不起作用
答案 0 :(得分:1)
使用::
(不允许在选项后传递值)和空格,-w 17
之间会有歧义,其中17
将是选项的值, -w 17
其中17
是另一个参数,它解释了getopt要求在使用::
时整理值
更糟糕的是,想想有其他选择的一般情况。 -w -x
会做什么? getopt
无法预测您在选择后需要一个号码。
我只想将getopt线更改为:
while ((o = getopt(argc, argv, "w:")) != -1) {
现在省略-w
仍会提供10
,因为该值是预先默认的。