Getopt дает -1 в качестве возвращаемого значения - PullRequest
0 голосов
/ 06 октября 2011

Я пытаюсь увидеть, как работают 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 ]

1 голос
/ 06 октября 2011

Я думаю, что ваше выражение должно быть

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

и опция должна заканчиваться на ':'

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

или два ':', если переключатель не обязателен.

1 голос
/ 06 октября 2011

На справочной странице -1 указывает, что все аргументы были заданы, а не 0, как вы, кажется, проверяете.

man 3 getopt

Если опция была успешно найдена, тогда getopt() возвращает символ опции.Если все параметры командной строки были проанализированы, то getopt () возвращает -1.

Код в вашем вопросе не разбирается из коробки, поэтому он не выглядит правильнымкопировать вставить, что делает обнаружение ошибки намного сложнее.Скобки в цикле while могут быть причиной вашей проблемы, но трудно сказать.Если я скопирую, вставлю ваш пример и исправлю проблему с скобками, код работает так, как вы ожидаете.

...