我在C中有一项任务,需要为不同形式的程序读入选项。不过,在我开始之前,我想确保getopt
部分工作正常。但是,程序不断删除最后一个参数,我不知道为什么。每当我输入最后一个字符时,程序将转到杀死程序的默认值。任何帮助表示赞赏!
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main(int argc, char **argv)
{
int sFlag = 0;
int lFlag = 0;
int dFlag = 0;
int rFlag = 0;
int c;
opterr = 0;
while ((c = getopt (argc, argv, "slr:")) != -1)
{
switch(c)
{
case 's':
sFlag = 1;
break;
case 'l':
lFlag = 1;
break;
case 'r':
rFlag = 1;
break;
default:
printf("unknown parameter introduced");
exit(-1);
break;
}
}
printf("s = %i, l = %i, d = %i, r = %i", sFlag, lFlag, dFlag, rFlag);
return 1;
}
答案 0 :(得分:1)
r
中"slr:"
后的冒号符号告诉getopt()
等待-r
后的强制参数。
示例:
getopt(argc, argv, "slr:")
可以解析./project -s -l -r r_arg
(或./project -r r_arg -s
等)getopt(argc, argv, "s:lr:")
可以解析./project -s s_arg -l -r r_arg
getopt(argc, argv, "s:lr:")
也可以解析./project -s -l -r r_arg
但没有错误,但程序的工作方式与用户的期望不同。这是因为getopt()
期望-s
后跟其参数,但看起来如此,因此下一个参数-l
已被消耗,并且不会命中switch(c)
。