首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Getopt连接参数

Getopt连接参数
EN

Stack Overflow用户
提问于 2013-03-11 09:14:08
回答 3查看 103关注 0票数 0

有没有办法使用getopt函数来解析:

代码语言:javascript
复制
./prog -L -U

等同于:

代码语言:javascript
复制
./prog -LU    

这是我的尝试(不起作用):

代码语言:javascript
复制
while ((c = getopt(argc, argv, "LU")) != -1) {
    switch (c) {
    case 'L':
        // L catch
        break;
    case 'U':
        // U catch
        break;
    default:
        return;
    }
}

在这个简单的例子中只有2个参数,但在我的项目中需要6个参数的所有组合。例如:-L-LURGHX-LU -RG -H等,getopt()能处理吗?或者我必须编写复杂的解析器才能这样做?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-03-11 09:26:13

除了缺少一个大括号外,你的代码对我来说工作得很好:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv) {
    int c;
    while ((c = getopt(argc, argv, "LU")) != -1) {
        switch (c) {
        case 'L':
            // L catch
            printf("L\n");
            break;
        case 'U':
            // U catch
            printf("U\n");
            break;
        default:
            break;
        }
    }
    return 0;
}
票数 2
EN

Stack Overflow用户

发布于 2013-03-11 09:16:45

getopt does seem capable of handling itand it does

下面是一些示例,展示了此程序使用不同的参数组合打印的内容:

代码语言:javascript
复制
% testopt
aflag = 0, bflag = 0, cvalue = (null)

% testopt -a -b
aflag = 1, bflag = 1, cvalue = (null)

% testopt -ab
aflag = 1, bflag = 1, cvalue = (null)
票数 2
EN

Stack Overflow用户

发布于 2013-03-11 09:24:16

它的行为完全如您所愿:

代码语言:javascript
复制
#include <stdio.h>
#include <unistd.h>

int main(int argc, char** argv) 
{
    int c;

    while ((c = getopt(argc, argv, "LU")) != -1) {
        switch (c) {
        case 'L':
            puts("'L' option");
            break;
        case 'U':
            // U catch
            puts("'U' option");
            break;
        default:
            puts("shouldn't get here");
            break;
        }
    }

    return 0;
}

并对其进行测试:

代码语言:javascript
复制
precor@burrbar:~$ gcc -o test test.c
precor@burrbar:~$ ./test -LU
'L' option
'U' option
precor@burrbar:~$ ./test -L -U
'L' option
'U' option

POSIX "Utiltiy Syntax Guidelines"后面的getopt() is a POSIX standard function,包括以下内容:

准则5:不带选项参数的选项在分组到一个'-‘分隔符之后时应该被接受。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15329778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档