简单的getopts c问题

时间:2014-04-09 17:25:31

标签: c getopt getopts

所以我有一个非常简单的程序,但由于某种原因,我无法正确选择。

  • 如果-h选项存在,我只想打印用法语句并退出。

  • 如果没有选项,我希望它能正常运行。

  • 如果有任何其他选项,我希望它打印用法和EXIT_FAILURE

出于某种原因,我无法得到这些结果。我知道这是一个简单的修复,我似乎无法找到答案。

现在这就是我所拥有的。

int main(int argc, char* argv[]){
   int c;

   while(( c = getopt( argc, argv, "h")) != -1){
      switch( c ){
      case 'h':
         usage(); return EXIT_SUCCESS;

      case '*':
         usage(); return EXIT_FAILURE;

      default:
         break;
      }
   }
   mainProgram();
   return EXIT_SUCCESS;
}

1 个答案:

答案 0 :(得分:1)

如果您阅读getopt(3)手册页:

  

如果getopt()无法识别选项字符,则会向stderr输出错误消息,   将角色存储在optopt中,并返回'?'。调用程序可以防止错误   将opterr设置为0。

因此,getopt()如果有人传入无法识别的选项,则会返回?。您正在寻找永远不会收到的*。在C中,*不作为通配符,因此这并不意味着"任何字符"。

使用default这里不是正确的解决方案(尽管它会起作用),因为这也会触发您尚未实现处理程序的有效选项。