【问题标题】:Parsing option arguments in terminal using getopt_long in C在 C 中使用 getopt_long 在终端中解析选项参数
【发布时间】:2016-01-24 22:37:50
【问题描述】:

我只是在通过终端解析我的选项参数时遇到了问题。 执行我的 c 文件时,我只能有一个选项,即文件名。我可以使用两个选项(一个短选项和一个长选项)输入文件名:

  • -f
  • --文件名

他们都需要文件名作为参数。 当我使用“-f”和“--filename”执行程序时,它可以正常工作,但是当我测试“-filename”时,它不会给我错误提示“用法是......”并且它会计算参数这个选项作为main的非选项参数之一(不知道我表达得好不好) 任何人都可以帮助我吗?我该如何处理?如何告诉用户这不是正确的选项? 到目前为止,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <getopt.h>

static struct option longopts[] = {
    {"filename",  required_argument, 0, 'f'},
    {0, 0, 0, 0}
};

int main(int argc, char **argv) {
    int res;
    int indexptr;
    char *filename;
    while ((res = getopt_long(argc,argv,"f:",longopts,&indexptr)) != -1)
    {
        switch(res)
        {
        case 'f':
            filename = optarg; // the file is now in optarg 
            break;

        default: /* '?' */
            fprintf(stderr, "Usage: %s <[-f/--filename Filename]> <D> <U>\n", argv[0]);
            exit(EXIT_FAILURE);
        }
    }
}

谢谢

【问题讨论】:

  • 你看过this如何使用它的简洁的例子吗?

标签: c terminal getopt-long


【解决方案1】:

当您执行-filename(带有一个破折号)时,大多数 getopt 实现会将其视为与-f ilename 相同(这不是错误)。如果你打印出它认为文件名参数是什么,你会看到“ilename”。

【讨论】:

  • 那么你能告诉我如何处理吗?说这不是一个正确的选择?谢谢
  • @jamal 你打算如何处理-f &lt;non_existent_file&gt;?情况与此基本相同。我想你会 statopen 文件,检查是否成功,如果失败则打印错误消息。
  • 谢谢@kaylum。我解决了这个问题:)
  • @jamal 很高兴听到。建议您将更改发布为问题的更新,以使未来的读者受益。
猜你喜欢
  • 2012-02-07
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 2016-09-30
  • 2017-03-28
  • 2016-07-17
  • 2023-03-07
  • 2015-05-08
相关资源
最近更新 更多