0

我想根据是否存在特定参数,委托给几个可能的参数列表之一,大致如下:

./test --do-thing-1 --option-A=7 --common-option --option-B=2 # options C and D not valid
./test --do-thing-2 --option-C=9 --common-option --option-D=1 # options A and B not valid

我能想到的最好的方法是main()处理所有常见的选项,并决定调用几个函数中的哪一个来处理其余的。

请注意,我不想限制顺序,以便公共选项只能首先出现。

我的问题是,如果我optind在第二次解析参数之前重置为 1 ,则会getopt_long通过将无效字符串传递给段错误strncmp- 所以我想我不应该搞乱 optind。

我有一个谷歌,找不到任何关于是否可以跳过getopt_long参数列表的参考(我知道它是可能的getopt),如果是,我该怎么做?

我宁愿不使用任何非标准库。(语言是纯 c,请不要使用 c++)

4

1 回答 1

1

我的问题是我没有将static struct option long_options[]数组的最后一行设置为零,正确设置它可以修复错误。

GNU getopt 还需要optind重置为 0 而不是 1 才能正确重置其内部状态。

于 2010-07-16T12:30:35.080 回答