我有一个带字符串文字的程序来指定可选的命令行参数。如何在c中处理这些可选的命令行参数?

时间:2015-09-26 06:40:10

标签: c command-line

以下是我的命令行参数的语法。

./main [-var1 value] [-var2 value] [-var3 value]

var1var2var3是字符串。  例如:var1是aaa,var2是bbb,var3是ccc。

但是对于具有单个字符选项的类似情况,例如abc,如下所示

./main [-a value] [-b value] [-c value] 
可以使用

getopt(argc, argv, "a:b:c:");。是否有类似的方法来处理我的计划var1var2var3

1 个答案:

答案 0 :(得分:4)

man getopt是你的朋友!

getopt是仅处理单个字母选项的历史函数,但它是使用两个随附广告进行扩展的:

  • getopt_long:接受以单个破折号(-a)开头的单个字母选项命令或以两个(--action
  • 开头的多字母命令
  • getopt_long_only:接受以一个或两个破折号开头的多字母选项(--action-action

(以下是手册页摘录)

后两者的签名是:

int getopt_long(int argc, char * const argv[],
       const char *optstring,
       const struct option *longopts, int *longindex);

其中longopts是指向以

声明的struct选项数组的第一个元素的指针
struct option {
    const char *name;
    int         has_arg;
    int        *flag;
    int         val;
};

(数组的最后一个元素必须用零填充)

如果longindex不为NULL,则指向一个变量,该变量设置为相对于longopts的long选项的索引。