Segfault为无效的长选项

时间:2015-06-20 16:52:16

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

我有以下代码:

    class TextFile: public File

为什么带有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(这也是一个无效选项)只是在屏幕上打印“无效选项”消息? / p>

1 个答案:

答案 0 :(得分:7)

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

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