C使用getOpt来解析多个参数

时间:2013-01-31 20:30:16

标签: c parsing getopt

我需要使用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是如何工作的。如何将开关与字符进行比较?!

2 个答案:

答案 0 :(得分:4)

首先,这个:

case 'cp':

......毫无意义。您无法使用charint代表两个字符。此外,如果使用-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