c - 无效长选项的段错误

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

我有以下代码:

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

最佳答案

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

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

关于c - 无效长选项的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30956582/

相关文章:

python - 通过 .txt 文件向 Scrapy Spider 传递一个要抓取的 URL 列表

c - 为什么库表在使用可选参数时表现异常?

php - 为什么 PHP 的 hash_equals() 函数中的参数顺序很重要?

c++ - 比较运算符值 C++

c - 将指向 char 数组的指针传递给函数时发生段错误

c - 查找输入文件中的最大行长度和最大行数,但我遇到了段错误?

qt - 如何将命令行参数逐字传递给 QProcess?

c - 插入链表

c - 内核如何在文件外部调用模块中的静态初始化和退出函数?

C fscanf 段错误错误 "No source available for "fancyfile() at 0x7fff855e6d39"