gpt4 book ai didi

c - 当在结构选项中设置标志时,getopt_long 不返回 0

转载 作者:行者123 更新时间:2023-12-02 00:08:36 27 4
gpt4 key购买 nike

我在C中使用getopt_long遇到了一个问题,如描述的那样,结构如下:

struct option{ 
const char *name;
int has_arg;
int *flag;
int val;
};

如果设置了 flag,getopt_long 应该返回 0 并将 *flag 设置为 val。但在我的代码中,getopt_long 返回 val 和 *flag 保持不变。代码如下:

#include<stdio.h>
#include<getopt.h>

int help;
int output;
int verbose;

const char *short_option = "ho:v";
const struct option long_options[] = {
{"help", 0, &help, 'h'},
{"output", 1, &output, 'o'},
{"verbose", 0, &verbose, 'v'},
{NULL, 0, NULL, 0}
};

void print_help()
{
printf("in option help: \n");
}

void print_output(char *content)
{
printf("in option output: argument is %s\n",content);
}

void print_verbose()
{
printf("in option verbose\n");

}

void print_args()
{
printf("help is %d\n",help);
printf("output is %d\n",output);
printf("verbose is %c\n",verbose);
}

int main(int argc, char **argv)
{
int next_option;
while( (next_option = getopt_long(argc, argv, short_option, long_options, NULL )) == 0)
{
printf("next_option is %c\n",next_option);
print_args();
}

return 0;
}

有人可以帮忙吗?

最佳答案

如果您检查 manual page ,你会看到:

getopt_long() and getopt_long_only() also return the option character when a short option is recognized. For a long option, they return val if flag is NULL, and 0 otherwise.

因此,如果您在调用程序时使用短选项,它将返回该选项字符。为了让函数按照您的意愿运行,您必须在调用程序时使用 long 参数。

关于c - 当在结构选项中设置标志时,getopt_long 不返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16852260/

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