我试图了解getopts的工作原理。我写了下面的代码,但不确定我做错了什么。请指点我:
#include<unistd.h>
..
..
int main( int argc, char *argv[])
{
int ch=0;
while((ch=getopt(argc, argv, "ltR:")!=-1) // 0 here was by mistake. Changed to -1
{
printf("%d",ch); //This prints -1
switch(ch)
{
case 'l':
printf("l");
break;
case 't':
printf("t");
break;
case 'R':
printf("R");
break;
}
}
return 0;
}
$ ./a.out -ltR
$ -1
$ ./a.out -l
$ -1
可能是我犯了一个错误,或者错过了我对getopt的理解。
进行了更改但仍然给出了相同的结果:(
谢谢, 法赞
答案 0 :(得分:1)
从手册页-1开始表示所有参数都已完成,而不是在你看来要检查时为0。
man 3 getopt
如果成功找到选项,则getopt()返回选项字符。如果已解析所有命令行选项,则getopt()返回-1。
你问题中的代码没有开箱即用解析,所以它似乎不是一个正确的复制粘贴,这使得发现错误更加困难。 while循环中的括号可能是您的问题的原因,但很难说。如果我复制粘贴您的示例并更正括号问题,则代码将按预期运行。
答案 1 :(得分:1)
我认为你的表达应该是
while((ch=getopt(argc, argv, "ltR")!=-1)
{..}
并且选项应以':'
结尾while((ch=getopt(argc, argv, "ltR:")!=-1)
{..}
或两个':'如果开关是可选的。