0

我有一个需要调用的程序:

program parameter1 parameter2 -x1 -y

但我觉得如果我这样做应该会起作用:

program -x1 -y parameter1 parameter2

或其组合。我如何获得parameter1并且parameter2没有可怕的肮脏黑客?目前我有一个

while ((c = getopt (argc, argv, "x:y")) != -1){
   /* do stuff */
}

循环获取可选参数,但其他参数呢?只看似乎是错误的argv[1]argv[2]因为它们可能在任何地方。

我确信有一个既定的解决方案。

4

1 回答 1

2

退出while循环后,optind指向第一个非选项参数。看一下getopt(3)手册页:

   If  there  are  no  more option characters, getopt() returns -1.  Then optind is the
   index in argv of the first argv-element that is not an option.

所以你的第一个非选项参数是argv[optind]等等。

while ((c = getopt (argc, argv, "x:y")) != -1){
   /* do stuff */
} 

param1 = argv[optind]
param2 = argv[optind+1]

getopt将置换参数,以便即使对于您的第一个示例,这仍然是正确的,其中选项参数位于非选项参数之后的命令行上。

于 2012-08-03T13:09:07.783 回答