I have the following code:
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);
}
}
}
Why is it with an argument of --versio
(intentionally misspelled) would cause a segfault but -a
(which is also an invalid option) just prints an "invalid option" message to the screen?
You have to terminate the
longopts
array with an entry that is all zeros, otherwisegetopt_long
doesn't know when it ends. Your code is crashing becausegetopt_long
is just iterating through random memory at that point because it has fallen off the end oflongopts
.