Я столкнулся с проблемой при использовании getopt_long в C. Как описано, в структуре следующим образом:
struct option{
const char *name;
int has_arg;
int *flag;
int val;
};
Если флаг установлен, getopt_long должен вернуть 0 и установить *flag как val. Но в моем коде getopt_long return 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;
}
Кто-нибудь может помочь?