我需要使用getopt来解析以下命令:
./center -n name –cp Anumber –i Anumber –t Anumber –s Anumber -fc nameOfaFile
所有这些都可以按任何顺序发出。
所以很明显我必须使用getOpt。
所以我一直在调查,这是我到目前为止所做的
void check_parameters (int argc, char** argv) {
int opt;
while((opt = getopt(argc, argv, "n:cp:i:c:fc:")) != -1) {
printf("give me opt %c \n", opt)
swicth(opt){
case 'n' :
//do something
case 'cp' :
//do something
case 'i' :
//do something
}
}
}
我确实知道3参数:OptString是我告诉getOpt它应该期望的选项的字符是什么 在optarg中也是参数
的地方它无法正常工作! 当我printf(“给我选择%c”,选择)它给我数字,而不是字符!
因此它不起作用。它没有正确检查参数
编辑: 做完男人3 getopt getopt的返回值是:如果成功找到选项,则getopt()返回选项字符。如果已解析所有命令行选项,则getopt()返回-1 它返回选项字符?它总是返回整数1.总是!我不明白getopt是如何工作的。如何将开关与字符进行比较?!
答案 0 :(得分:4)
首先,这个:
case 'cp':
......毫无意义。您无法使用char
或int
代表两个字符。此外,如果使用-cp 101
运行您的程序,getopt会将其视为-c p 101
,以获得完全不同的结果。如果您想使用长选项,请使用getopt_long
代替相应的调用语法,例如:./a.out -n 42 --cp 101
。
现在,这是一个getopt()
实际运作的实例:
#include <stdio.h>
#include <getopt.h>
int main(int argc, char* argv[]) {
int opt;
while((opt = getopt(argc, argv, "n:cp:i:c:fc:")) != -1) {
switch (opt){
case 'n':
printf("n was %s\n", optarg);
break;
case 'i':
printf("i was %s\n", optarg);
break;
}
}
return 0;
}
答案 1 :(得分:2)
getopt
只处理单字符选项名称,而不是-cp
或-fc
(它在单个字符串中将其解释为多个选项标志:-c -p
,{ {1}})。如果你想坚持你定义的语法,那么你可以更轻松地自己动手:
-f -c