如何在c中使用long选项?

olmpazwi  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(126)

如何通过getopt_long使用长选项:
例如:

--wide-option

我有--wide-w
在--wide-option上,它会产生以下错误:
“无法识别的选项”

int main(int argc, char **argv)
{
    struct option opts[] =
    {
        {"wide", 1, 0, 'w'},
        {
            0, 0, 0, 0
        }
    };
    int option_val = 0;
    int counter = 10;
    int opindex = 0;
    while ((option_val = getopt_long(argc, argv, "w:", opts, &opindex)) != -1)
    {
        switch (option_val)
        {
        case 'w':
            if (optarg != NULL)
                counter = atoi(optarg);
            for (int i = 0; i < counter; i++)
                printf("Hello world\n");
            break;
        default:
            return 0;
        }
    }
    return 0;
}
1zmg4dgp

1zmg4dgp1#

如果查看cat源代码(here),您可以看到--number--number-nonblank两个不同的选项-b-n)。(靠近第555行)。
如果你想做同样的事,你可以这样说:

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

int main(int argc, char **argv)
{
    struct option opts[] =
    {
        {"wide", 1, 0, 'w'},
        {"wide-option", 0, 0, 'o'}, /* declare long opt here */
        {
            0, 0, 0, 0
        }
    };
    int option_val = 0;
    int counter = 10;
    int opindex = 0;
    while ((option_val = getopt_long(argc, argv, "w:o", opts, &opindex)) != -1) /* the case here (I arbitrary choose 'o') */
    {
        switch (option_val)
        {
        case 'w':
            if (optarg != NULL)
                counter = atoi(optarg);
            printf("option --wide %d found!\n", counter);
            for (int i = 0; i < counter; i++)
                printf("Hello world\n");
            break;
         case 'o': /* and take the case into account */
                printf("option --wide-option found!\n");
            break;
        default:
            return 0;
        }
    }
    return 0;
}

相关问题