Optarg总是空的

时间:2016-02-15 06:59:56

标签: c++ getopt

Optarg始终为空。应用程序崩溃。

static const char* const short_options = "a:h:p";
static const struct option long_options[] =
{
    { "address",    1, NULL, 'a' },
    { "help",       0, NULL, 'h' },
    { "port",       1, NULL, 'p' }
};

我尝试将空字符串添加到long_options中,但它没有帮助。

static const struct option long_options[] =
{
    { "address",    1, NULL, 'a' },
    { "help",       0, NULL, 'h' },
    { "port",       1, NULL, 'p' },
    {0,             0, NULL,  0 }
};

但它没有帮助。

There是optarg使用的示例。我以相同的方式使用optarg,但是得到null。

do {
        nextOption = getopt_long(argc, argv, short_options, long_options, NULL);
        switch (nextOption)
        {
        case 'a':
        {
            //do something
        }
            break;
        case 'h':
            printf(usage_template);
            exit(0);
        case 'p':
        {
            long value;
            char* end;
            value = strtol(optarg, &end, 10);//OPTARG IS NULL
            if (*end != '\0')
            {
                printf(usage_template);
            }
            port = (uint16_t)htons(value);
        }
            break;
        case '?':
            printf(usage_template);
            exit(0);
        case -1:
            break;
        default:
            exit(0);
        }
    } while (nextOption != -1);

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

看起来你的“p”选项后面没有冒号,所以getopt并不期望它有一个参数。