C中的Optopt和getopt

时间:2016-09-10 04:54:21

标签: c getopt

我试图找出getopt,但我一直挂在switch语句的末尾。

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int
main (int argc, char **argv)
{
  int aflag = 0;
  int bflag = 0;
  char *filename = NULL, *x = NULL;
  int index;
  int c;

  opterr = 0;
  while ((c = getopt (argc, argv, "hnc:")) != -1)
    switch (c)
      {
      case 'h':
        printf("You chose h");
        break;
      case 'n':
        x = optarg;
        break;
      case 'l':
        filename = optarg;
        break;
     case '?':
        if (optopt == 'n' || optopt == 'l')
          fprintf (stderr, "Option -%c requires an argument.\n", optopt);
        else if (isprint (optopt))
          fprintf (stderr, "Unknown option `-%c'.\n", optopt);
        else
          fprintf (stderr,
                   "Unknown option character `\\x%x'.\n",
                   optopt);
        return 1;
      default:
        abort ();
      }

  for (index = optind; index < argc; index++)
    printf ("Non-option argument %s\n", argv[index]);
  return 0;
}

当我编译并运行a.out -l时,它会按预期运行,但是当我执行a.out -n时它什么都不做,它应该说&#34;选项n需要参数。&#34 ;

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

你的optstring "hnc:"n是一个不需要参数的有效参数,而l根本没有指定,所以?的情况总是如此击中。尝试使用

getopt (argc, argv, "hn:l:")

表示nl都需要参数。