13
我正在嘗試使用getopt_long_only來解析命令行。我的應用程序讀取一些命令行選項。getopt_long_only分段錯誤
E.g. 「app - alpha = 1 - beta = 2 --cecil = 3」
getopt_long_only只要傳入有效的命令行參數就可以正常工作。但是,如果您使用無效的「單一虛線「選項在最後和其他不適當的地方,會發生seg故障。這裏發生了什麼?似乎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;
}
如果將'int index;'更改爲'int index = 0',它會不會崩潰? – OneOfOne
謝謝1of1。當我這樣做的時候確實停止了崩潰。這是毫無意義的......所以我深入瞭解了手冊頁。這導致我發現我忘記了正確地null結束數組中的最後一行。 – selbie