2ma*_*mac 1 c getopt getopt-long segmentation-fault command-line-arguments
我有以下代码:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么带有--versio(故意拼写错误)的参数会导致段错误但是-a(这也是一个无效选项)只是在屏幕上打印"无效选项"消息?
您必须longopts使用全零的条目终止数组,否则getopt_long不知道它何时结束.你的代码崩溃了,因为getopt_long它只是在那个时候通过随机内存进行迭代,因为它已经脱落了longopts.
struct option longopts[] =
{
{"version", no_argument, NULL, 'v'},
{NULL, 0, NULL, 0}
};
Run Code Online (Sandbox Code Playgroud)