如果插入注释,optarg的值是多少

时间:2018-01-29 08:57:00

标签: c getopt

我有下一个代码。

int opt;

while ((opt = getopt(_argc, _argv, "n:pcs:")) != -1)
{
    switch (opt) 
    {
        case 'n':
            *_numberOfMessages = atoi(optarg);
            break;

        case 'p':
            if(*_consumereFlag)
            {
                return ERROR;
            }
            *_producerFlag = ON;
            break;

        case 'c':
            if(*_producerFlag)
            {
                return ERROR;
            }
            *_consumereFlag = ON;
            break;  

        case 's':
            *_delayTimemSec = atoi(optarg);
            break;

        default:
            return ERROR;
    }
}
return 0;

代码从用户获取arg,并将它们插入到调用optarg的字符串中。如果我在-n或-s之后插入arg,一切正常。问题是,我只想在它之后没有任何东西写。 如果-n或-s之后没有arg,optarg会是什么?

1 个答案:

答案 0 :(得分:2)

语法"n:"表示n 后跟参数。如果不是,则表示错误。默认情况下,任何错误都会返回字符"?"

如果你有GNU getopt(),那么你可以使用双冒号:"n::"。双冒号意味着参数是可选的。这样getopt无论如何都会返回n,而optarg将是NULL或有效指针。但是,至少在我的测试中,getopt在这种情况下选项后不需要空格。即"n:"允许"-n 100""-n100",而"n::"只允许后者。