【问题标题】:option followed by a option in getopt [where the earlier option was expecting a value]选项后跟 getopt 中的选项 [之前的选项需要一个值]
【发布时间】:2012-09-19 00:35:28
【问题描述】:

我怀疑我们是否有两个选项 -a 和 -c 并且选项 -a 需要有一个值,而 -c 没有值

现在如果我给 ->testopt -a -c [testopt 是程序]

然后我的程序将 -c 作为 -a 的值。有没有办法可以确保具有值的选项没有其他选项作为其值?

问题是系统接受 - 一个关键字的值作为我需要阻止的另一个关键字。 例如- testopt -a -c。在这种情况下,-a 有一个强制参数(值),而 -c 没有值 .. 但我的 getopt 将其解释为“-c”是“-a”的值,我如何使用得到选择。

【问题讨论】:

  • 请在您为getopt 定义命令行选项的位置添加代码。
  • @JoachimPileborg:当然我会这样做。感谢您的提示。
  • @HonkyTonk:抱歉将无法做到这一点......专有代码......但问题是系统接受 - 一个关键字的值作为我需要阻止的另一个关键字。例如- testopt -a -c。在这种情况下,-a 有一个强制参数(值),而 -c 没有值 .. 但我的 getopt 将其解释为“-c”是“-a”的值,我如何使用获取选择。
  • 我想说,如果您用占位符替换任何实际名称,您发送给getopt 以定义选项的字符串是安全的。然后就可以看到你实际做了什么,这会有所帮助,因为我无法理解你的描述。您的“错误”很可能是编码错误...
  • @HonkyTonk :这是 getopt 字符串: getopt(argc, argv, "Rc:dfh:I:a:i:l:Lt:np:qrs:vMUC:Ft:V:")

标签: c getopt


【解决方案1】:

您将-c 作为-a 选项的值,因为您指定-a 具有值。如果你用相反的方式调用你的程序

$ testopt -c -a

然后getopt 将返回一个'?',表示缺少选项值(根据getopt manual page),并且将在控制台上打印一个错误。

不幸的是,没有办法告诉getopt 参数具有可选值,那么您必须实现自己的选项解析器。

【讨论】:

  • options 参数是一个字符串,它指定了对该程序有效的选项字符。此字符串中的选项字符后面可以跟一个冒号 (':') 以指示它需要一个必需的参数。如果选项字符后跟两个冒号(‘::’),则其参数是可选的;这是一个 GNU 扩展。 gnu.org/software/libc/manual/html_node/… 我想我已经在开源项目 dnrd 中将它与可选参数一起使用了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多