【问题标题】:get optarg with getopt使用 getopt 获取 optarg
【发布时间】:2013-09-27 00:31:19
【问题描述】:

我有以下代码:

char opt;
int bla1,bla2,bla3;
char *myarg = NULL;
while((opt = getopt(argc,argv,"a:b:cd")) != -1)
{
    switch (opt)
    {
        case 'a':
            bla1 =  atoi(optarg);
            break;
        case 'b':
            myarg = optarg;
            break;
        case 'c':
            bla2 = 1;
            break;
        case 'd':
            bla3 = 1;
            break;
        default:
            break;
    }
}

我希望能够对 case 'b' 使用 optarg,但如果没有选择任何内容来获取默认值。现在需要 arg 并且无法绕过它,如果我将 "b:" 替换为 "b" 它会忽略该参数。

我怎样才能让它在这两种情况下都起作用?

【问题讨论】:

    标签: c getopt


    【解决方案1】:

    Some but not all versions of getopt 允许您通过在相关选项字符后放置 两个 冒号来指示参数是可选的。

    想要一个选项的可选参数表明你的程序足够复杂,你应该考虑支持长选项名称。不幸的是,没有标准函数可以做到这一点,但 GNU libc 有两个:getopt_long 和更强大的argp。如果你的软件是 GPL 兼容的,你可以从 gnulib 获得它们中的任何一个,然后你就不用依赖 glibc。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多