getopt给-1作为返回值

时间:2011-10-06 15:51:45

标签: c getopt

我试图了解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的理解。

进行了更改但仍然给出了相同的结果:(

谢谢, 法赞

2 个答案:

答案 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)
{..}

或两个':'如果开关是可选的。