我一直在阅读如何使用getopt_long()
,以及如何使用optlong“读取”多个字符选项。
我需要从终端解析以下条目:
./bomb –n String –cp Integer –i Integer –c Integer –fc String
所以在我使用getoptlong之前,我定义了我的短期和长期选项:
if(argc != 11){
perror("Error en numero de argumentos \n");
exit(EXIT_FAILURE);
}
const char* const short_options = "n:i:c:";
static struct option long_options[] = {
{"cp", 1, NULL, 'a'},
{"fc", 1, NULL, 'b'},
{0, 0 , 0, 0}
};
我的short_options
选择带有参数的n
(这是:
的用途),c
和i
相同。
所以应该对长期选项应用同样的方法(它们也都会选择参数)。
while(opt != -1){
opt = getopt_long(argc, argv, short_options, long_options, NULL);
switch (opt){
case 'n':
//print it
case 'a':
//print it
}
}
现在问题是,这个代码在解析-c -i
和-n
时非常适合,它会输入它所属的大小写并正确打印。
我的问题是,它不适用于-cp
和-fc
。而且我真的不知道如何解决这个问题,因为我之前没有使用getopt()
。
提前致谢
答案 0 :(得分:2)
getopt_long()
功能的作用类似于getopt()
,但它也是如此 接受长选项,以两个破折号开头。
和
getopt_long_only()
为like getopt_long()
,但-
和--
可以 表示长期选择。
因此,您应该使用--cp
和--fc
,或者切换到getopt_long_only
。