3

C で getopt_long を使用すると問題が発生しました。

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;
}

誰でも助けることができますか?

4

1 に答える 1

4

マニュアルページを確認すると、次のことがわかります。

getopt_long()getopt_long_only()は、短いオプションが認識された場合にもオプション文字を返します。長いオプションの場合、flag が NULL の場合は val を返し、それ以外の場合は 0 を返します。

したがって、プログラムを呼び出すときに短いオプションを使用すると、そのオプション文字が返されます。関数が意図したとおりに動作するには、プログラムを呼び出すときに long 引数を使用する必要があります。

于 2013-05-31T08:13:42.140 に答える