我有下一个代码。
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会是什么?
答案 0 :(得分:2)
语法"n:"
表示n 应后跟参数。如果不是,则表示错误。默认情况下,任何错误都会返回字符"?"
。
如果你有GNU getopt(),那么你可以使用双冒号:"n::"
。双冒号意味着参数是可选的。这样getopt
无论如何都会返回n
,而optarg
将是NULL
或有效指针。但是,至少在我的测试中,getopt
在这种情况下选项后不需要空格。即"n:"
允许"-n 100"
和"-n100"
,而"n::"
只允许后者。