c - getopt_long_only : how to prevent the next option as being taken as argument for the previous option with "required_argument" flag

标签 c arguments getopt getopt-long

例如,

我有如下结构选项:

struct option options[] = {
    {"input", required_argument, NULL, OPT_INPUT},
    {"flag", no_argument, NULL, OPT_FLAG},

现在,如果程序的用户在 -input 命令后错误地省略了输入文件名,则传递标志,如下所示:

./program -input -flag

getopt_long_only 将“-flag”视为输入的参数,因此将其作为程序中的输入文件,而不是下一个参数(因此在 -input 之后没有传递任何参数时返回错误)。如何避免这种情况?

我正在使用 GUN/LINUX (2.6.34.3) 和 gcc (GCC) 4.4.2 20091027 (Red Hat 4.4.2-7)。

最佳答案

我认为最简单的方法是在读入所有内容后简单地检查传递给 -input 的参数是否不等于 -flag。例如,如果您要将所需的输入参数存储在 char *temp,只需检查 strcmp(temp, "-flag") 是否为非零。如果它为零(即,他们输入了 ./program -input -flag),则打印一条错误消息并退出。

关于c - getopt_long_only : how to prevent the next option as being taken as argument for the previous option with "required_argument" flag,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24016990/

相关文章:

C - 嵌套 while 循环中的 Getchar 导致无限循环

Java方法参数之谜

regex - 如何修复 Perl Getopt::Long 事件未找到错误?

c++ - 指向 CUDA 中对象指针数组的指针

c++ - FPU 控制函数是否与 x64_64 处理器相关?

c - float 的按位乘法

python - 获取原始输入作为选项?

python - 从 cmd 行或 bash 脚本将参数传递给 python 脚本

ios - 如何在 View Controller 之间传递参数

我可以使用 getopt 按特定顺序处理选项吗?