我想根据是否存在特定参数来委托(delegate)几个可能的参数列表之一,大致如下:
./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
出现段错误code> - 所以我想我不应该搞乱 optind。
我谷歌了一下,找不到任何关于是否可以跳过getopt_long
参数列表的引用(我知道getopt
是可能的) >),如果是,我该怎么做?
我不想使用任何非标准库。 (语言是纯 c,请不要使用 c++)
最佳答案
我的问题是我没有设置 static struct option long_options[]
的最后一行数组为零,正确设置可以修复错误。
GNU getopt 还需要 optind
重置为 0 而不是 1,以便正确重置其内部状态。
关于c - 是否可以通过 getopt_long 参数列表向后移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3263971/