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