0

我想看看 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 理解的某些方面。

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

谢谢,法赞

4

2 回答 2

1

从手册页 -1 表示所有参数都已完成,而不是您似乎正在检查的 0。

man 3 getopt

如果成功找到选项,则 getopt() 返回选项字符。如果所有命令行选项都已解析,则 getopt() 返回 -1。

您问题中的代码没有立即解析,因此它似乎不是正确的复制粘贴,这使得发现错误变得更加困难。while 循环上的括号可能是您的问题的原因,但很难说。如果我复制粘贴您的示例并更正括号问题,则代码将按您的预期工作。

于 2011-10-06T15:55:57.373 回答
1

我认为你的 while 表达应该是

while((ch=getopt(argc, argv, "ltR")!=-1)
{..}

并且该选项应以“:”结尾

while((ch=getopt(argc, argv, "ltR:")!=-1)
{..}

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

于 2011-10-06T15:56:56.177 回答