gpt4 book ai didi

无法使用 getopt_long 读取参数

转载 作者:太空宇宙 更新时间:2023-11-04 08:43:48 26 4
gpt4 key购买 nike

我有下面的代码。但是当我用 --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);

最佳答案

指定 &debuglongopts不将选项的整数值存储到指定地址 getopt_long希望您自己提取整数值。

根据 the manual , int *flag struct option的成员做一些完全不同的事情:

flag "specifies how results are returned for a long option. [If non-NULL], getopt_long() returns 0, and flag points to a variable which is set to val if the option is found, but left unchanged if the option is not found.

您指定 &debug对于 flag'd'对于 val , 所以 debug设置为 'd' (数字 100)当 --debug被指定。由于您已经存储了 getopt_long 的结果进入opt变量,你不需要存储 &debuglongopts根本。相反,使用 optarg变量获取 --debug 的参数:

  case 'd':
debug = atoi(optarg);
switch (debug) {
...

关于无法使用 getopt_long 读取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22466993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com