我有以下代码:
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/