getopt只接受一个参数

时间:2018-03-26 23:46:33

标签: c getopt

我在C中有一个关于getopt的问题。我有多个选项标志,并试图让它为一切采取一个参数。命令行看起来像command -a fileNamecommand -b fileNamecommand -ab fileName。基本上每个命令都接受一个fileName,如果他们想要组合命令,他们只需键入一个fileName。在getopt中,字符串看起来像a:b:,变量设置为argv[argc -1]。如果它只是一个选项,但是如果有多个选项(即command -ab fileName)则失败,因为:强制用户输入选项,但是::将使得单选项不会强制用户输入选项。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

optind全局变量可让您知道有多少argv字符串被使用。因此,解决此问题的一种方法是只删除冒号,并使用类似“ab”的字符串。 以下是代码外观的示例(根据手册页中的示例改编):

int main(int argc, char *argv[])
{
    int ch;
    while ((ch = getopt(argc, argv, "ab")) != -1)
    {
        if (ch == 'a')
            printf("Got A\n");
        else if (ch == 'b')
            printf("Got B\n");
        else
            printf("Got confused\n");
    }

    if (optind != argc-1) 
        printf("You forgot to enter the filename\n");
    else
        printf("File: %s\n", argv[optind]);
}

如果使用

之类的命令行运行它
./test -ab hello

输出

Got A
Got B
File: hello