【问题标题】:First argument that is without '-' has to be necessary第一个没有'-'的参数必须是必要的
【发布时间】:2021-12-18 18:12:27
【问题描述】:

我正在编写接受命令行参数的程序,但第一个参数是必需的,并且没有连字符(“-”)。应用程序的执行必须是:

./program <server> [-d] [-n]

我试图让argv[1](在这种情况下是server)成为服务器,但是当服务器以某种方式被遗忘时会出现问题,然后它将选项保存到服务器中。当需要不带连字符的第一个参数时,我该如何处理或者我的optstring 应该是什么样子?

【问题讨论】:

  • 只是头脑风暴...我不使用getopt()。也许试试getopt(argc - 1, argv + 1, "options")??
  • 如果需要,那么它不是一个“选项”。
  • 猜你是对的@WilliamPursell
  • 另外,如果您打算坚持要求的参数必须出现在所有选项之前,那么程序需要的命令行格式与getopt()支持的格式不一致。您也许可以说服getopt() 处理选项,例如通过@pmg 描述的技巧,但您应该考虑改为遵守标准POSIX 约定,其中非选项参数在之后 所有选项,或遵循一个宽松的约定(至少受 GNU getopt() 支持),其中选项和非选项参数可以混合使用。

标签: c getopt


【解决方案1】:

如果您的参数前面没有'-',那么 getopt 将无法识别它。 您应该自己处理第一个参数,如下所示:

if (!(argc >= 2 && argv[1][0] != '-'))
    errx(1, "Usage: ./program <server> [-d] [-n]");

然后您可以使用 getopt,因为它会独立于其他值搜索以“-”开头的选项。

如果您想处理不带任何值的 -d-n 选项,您的 optstring 应类似于 "dn"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-11-12
    • 2017-04-04
    • 2020-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多