Я пытаюсь использовать getopt_long_only для разбора командной строки. Мое приложение читает несколько параметров командной строки.
например. "app --alpha = 1 --beta = 2 --cecil = 3"
getopt_long_only работает нормально, как и ожидалось, при условии, что передаются допустимые параметры командной строки. Но если вы вызываете приложение с недопустимым параметром «одиночная пунктирная» в конце и в других неподходящих местах, происходит сбой сегмента. Что тут происходит? Похоже, что getopt_long_only не устойчив к ошибочным аргументам. Или я вызываю функцию неправильно?
Пример:
> ./app --beta=1 -?
starting
index = 1 ret=0 optarg=1
Segmentation fault
Код ниже (C ++: app.cc)
#include <stdio.h>
#include <getopt.h>
void ProcessCommandLineArgs(int argc, char** argv)
{
option longopts[] = {
{"alpha", optional_argument, 0, 0},
{"beta", optional_argument, 0, 0},
{"cecil", optional_argument, 0, 0}
};
int index;
int ret;
bool fParseError = false;
while (true)
{
ret = ::getopt_long_only(argc, argv, "", longopts, &index);
if (ret < 0)
{
break;
}
if ((ret == '?') || (ret == ':'))
{
fParseError = true;
break;
}
printf("index = %d ret=%d optarg=%s\n", index, ret, optarg?optarg:"<null>");
}
}
int main(int argc, char** argv)
{
printf("starting\n");
ProcessCommandLineArgs(argc, argv);
printf("exiting\n");
return 0;
}