我有以下代码。 但是当我使用--debug = 2运行它时,调试变量的值为100.我期待2 ... 我的错误在哪里? 代码如下:
int debug=0;
int opt;
struct option longopts[] = {
{ "debug", required_argument, &debug, 'd' }
};
while ((opt = getopt_long(argc, argv, "d", longopts, NULL))!= -1)
{
switch (opt)
{
case 'd':
switch (debug)
{
case 1:
logPrio = LOG_INFO;
printf("1");
break;
case 2:
printf("2");
logPrio = LOG_CRIT;
break;
}
}
}
printf ("--%d--", debug);
答案 0 :(得分:2)
在&debug
中指定longopts
并不将选项的整数值存储到指定的地址,getopt_long
希望您自己提取整数值。
根据the manual,int *flag
struct option
成员完全不同:
flag
"指定如何为长选项返回结果。 [如果 非NULL],getopt_long()
返回0,标志指向变量 如果找到该选项,则设置为val
,但如果保持不变则保持不变 找不到该选项。
您为&debug
指定了flag
,为'd'
指定了val
,因此debug
设置为'd'
(数字100){ {1}}已指定。由于您已将--debug
的结果存储到getopt_long
变量中,因此您根本不需要将opt
存储在&debug
中。相反,使用longopts
变量将参数设为optarg
:
--debug