getopt 给出 -1 作为返回值

发布于 2024-12-08 16:00:39 字数 743 浏览 1 评论 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 理解的某些方面。

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

谢谢, 费赞

I am trying to see how getopts work. I wrote the code below but not sure what I am doing wrong. Please point me :

#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

May be I am doing a really mistake or missing out on some aspect of my understanding of getopt.

Made changes but still gives the same result:(

Thanks,
Faizan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

只涨不跌 2024-12-15 16:00:39

我认为你的 while 表达式应该是,

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

并且如果 switch 是可选的,选项应该以 ':'

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

或两个 ':' 结尾。

I think your while expression should be

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

and the option should end with ':'

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

or two ':' if switch is optional.

北笙凉宸 2024-12-15 16:00:39

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

man 3 getopt

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

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

From the man page -1 indicates that all the arguments have been done, rather than 0 as you appear to be checking for.

man 3 getopt

If an option was successfully found, then getopt() returns the option character. If all command-line options have been parsed, then getopt() returns -1.

The code in your question doesn't parse out of the box so it doesn't appear to be a proper copy paste which makes spotting the error a lot harder. The brackets on the while loop might be the cause of your issue but it's hard to tell. If I copy paste your example and correct the bracket issue the code works as you expect it to.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文