【问题标题】:getopt_long_only: how to prevent the next option as being taken as argument for the previous option with "required_argument" flaggetopt_long_only:如何防止将下一个选项作为带有“required_argument”标志的上一个选项的参数
【发布时间】:2023-03-21 14:42:02
【问题描述】:

例如,

我的结构选项如下:

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)。

【问题讨论】:

  • 你没有提到你的操作系统。如果您可以使用 GNU 扩展(Linux、Unix),请使用 getopt 并参考this SO question

标签: c arguments getopt getopt-long


【解决方案1】:

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

【讨论】:

  • 是的,这也是我目前能想到的唯一解决方案。不过,“问题”是选项结构有大约 40 个成员 - 所以这意味着检查所有 40 个案例的 40 个字符串,这听起来有点迟钝。我想知道是否还有其他方法,因为这应该不是一个非常罕见的问题。
  • 也许只检查参数的第一个字符是否为-
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 2023-01-09
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多