c - 是否可以通过 getopt_long 参数列表向后移动?

标签 c getopt-long

我想根据是否存在特定参数来委托(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/

相关文章:

c - ASM x64 scanf printf double, GAS

c++ - 在C++中序列化二进制数据的正确方法

将文件中的数字字符串转换为 C 中的 int 数组

c - Keil uVision 单步调试项目外的代码

无法使用 perl 中的系统命令获取已编译 C 程序执行的标准错误

linux - getopt_long 与 getopt_long_only

c - 在 C 中使用 getopt_long 的文件路径无效

C++ boost::program_options 读取与 getopt_long 兼容的参数

perl - 我如何使用 Perl 的 Getopt::Long 处理 -r=<pattern>?

c++ - getopt_long 没有正确处理我的论点