Optarg始终为空。应用程序崩溃。
static const char* const short_options = "a:h:p";
static const struct option long_options[] =
{
{ "address", 1, NULL, 'a' },
{ "help", 0, NULL, 'h' },
{ "port", 1, NULL, 'p' }
};
我尝试将空字符串添加到long_options中,但它没有帮助。
static const struct option long_options[] =
{
{ "address", 1, NULL, 'a' },
{ "help", 0, NULL, 'h' },
{ "port", 1, NULL, 'p' },
{0, 0, NULL, 0 }
};
但它没有帮助。
There是optarg使用的示例。我以相同的方式使用optarg,但是得到null。
do {
nextOption = getopt_long(argc, argv, short_options, long_options, NULL);
switch (nextOption)
{
case 'a':
{
//do something
}
break;
case 'h':
printf(usage_template);
exit(0);
case 'p':
{
long value;
char* end;
value = strtol(optarg, &end, 10);//OPTARG IS NULL
if (*end != '\0')
{
printf(usage_template);
}
port = (uint16_t)htons(value);
}
break;
case '?':
printf(usage_template);
exit(0);
case -1:
break;
default:
exit(0);
}
} while (nextOption != -1);
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
看起来你的“p”选项后面没有冒号,所以getopt并不期望它有一个参数。