正确处理非可选参数的optargs(c)

时间:2012-08-03 12:54:26

标签: c command-line-arguments

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

program parameter1 parameter2 -x1 -y

但是如果我这样做,我觉得它应该有效:

program -x1 -y parameter1 parameter2

或其组合。如果没有可怕的肮脏黑客,如何获得parameter1parameter2?目前我有一个

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

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

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

1 个答案:

答案 0 :(得分: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将置换参数,以便即使对于第一个示例,这仍然是正确的,其中选项参数位于非选项参数之后的命令行上。