c - getopt灵活性使空间也能正常工作

标签 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,但是空格不起作用

最佳答案

::(不允许在选项后传递值)和空格之间,在-w 17(其中17是选项的值)和-w 17(其中17是另一个值)之间将存在歧义参数,该参数说明getopt需要在使用::时对值进行整理

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

我只是将getopt行更改为:

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


现在省略-w仍会给出10,因为该值是默认值。

关于c - getopt灵活性使空间也能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49022252/

相关文章:

c - 使用 C 进行 24 位 bmp 边缘检测

c - gcc 是否提供内置函数来读取大端内存?

c - C语言中**是什么意思?

c - 编写库时使用 OpenMP

c - C语言中如何隐藏命令提示符

c - 死锁预防,随机线程执行顺序C

c++ - 将 WCHAR 用作 CHAR?

c++ - 'switch' 在 C/C++ 中有哪些有趣的用途?

c - 在这个字符串比较函数中对 (const char*) cast C 的剖析和解释

c - 不到2秒返回结果