用getopt获取optarg

时间:2013-09-21 19:33:22

标签: c getopt

我有以下代码:

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;
    }
}

我希望能够将optarg用于案例'b',但是如果没有选择获取默认值。现在需要arg并且不能绕过它,如果我用“b”替换“b:”它会忽略参数。

如何在两种情况下都能正常工作?

1 个答案:

答案 0 :(得分:2)

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

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