【问题标题】:Segfault for invalid long option无效长选项的段错误
【发布时间】:2015-09-06 12:36:16
【问题描述】:

我有以下代码:

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(这也是一个无效选项)只会在屏幕上打印“无效选项”消息?

【问题讨论】:

    标签: c segmentation-fault command-line-arguments getopt getopt-long


    【解决方案1】:

    您必须使用全为零的条目来终止longopts 数组,否则getopt_long 不知道它何时结束。您的代码正在崩溃,因为 getopt_long 那时只是在遍历随机内存,因为它已经脱离了 longopts 的末尾。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-10
      相关资源
      最近更新 更多