【发布时间】:2013-01-31 20:30:16
【问题描述】:
我需要使用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("give me opt %c", opt) 它给我的是数字,而不是字符!
因此它不起作用。它没有正确检查参数
编辑:
做完 man 3 getopt
getopt 的返回值为:如果成功找到一个选项,则 getopt() 返回选项字符。如果已解析所有命令行选项,则 getopt() 返回 -1。
它返回选项字符?它总是返回整数 1。总是!我不明白 getopt 是如何工作的。开关与字符相比如何?!
【问题讨论】:
-
getopt 处理单个字符选项,它不能处理例如
fc作为一个选项。同样 case 'cp' 是错误的,您不能将 2 个字符指定为单个字符。请展示您拥有的真实代码,包括打印选项的位置 - 当前代码几乎没有意义,并向我们展示您的程序的实际输出。 -
执行“man getopt”;它确实返回一个int。我不明白你的问题。
-
您介意发布实际的可编译代码吗?这段代码充满了无意义和语法错误。
-
@hari 如果成功找到选项,则 getopt() 返回选项字符。如果所有命令行选项都已解析,则 getopt() 返回 -1。