无效长选项的段错误

Segfault for invalid long option

我有以下代码:

struct option longopts[] =
  {
    {"version", no_argument, 0, 'v'}
  };

if (argc > 1)
  {
    int c;
    int longindex;
    while ((c = getopt_long (argc, argv, "v", longopts, &longindex)) != -1)
      {
        switch (c)
          {
          case 'v':
            puts (VERSION_INFO);
            exit (0);

          case '?':
            exit (1);
          }
      }
  }

为什么它的参数 --versio(故意拼写错误)会导致段错误,但 -a(这也是一个无效的选项)只是打印一条 "invalid option" 消息到屏幕?

你必须用一个全为零的条目来终止 longopts 数组,否则 getopt_long 不知道它何时结束。你的代码崩溃了,因为 getopt_long 只是在那个时候迭代随机内存,因为它已经从 longopts.

的末尾掉下来了
struct option longopts[] =
  {
    {"version", no_argument, NULL, 'v'},
    {NULL, 0, NULL, 0}
  };