【问题标题】:Second argument is not working in command line argument [closed]第二个参数在命令行参数中不起作用[关闭]
【发布时间】:2015-12-08 20:25:51
【问题描述】:

使用 Visual Studio 2015 提供命令行参数,第二个参数显示错误。代码如下

// command line options
        printf("Mandatory arguments to long options are mandatory for short options too.\n");
        printf("  -i,  --input=PATH          set the path to the input image\n");
        printf("                               (*.jpg, *.png, etc.)\n");
        printf("  -o,  --output=PATH         set the path to the output image\n");
        printf("                               (*.jpg, *.png, etc.)\n");

每当我给出输出路径时,它都会显示错误。 Invalid command line argument。我的序列就像命令行参数中的 E:\1.jpg D:\。

编辑:

解析代码

// parse command line arguments
    arg = 2;

    while(arg < argc)
    {
        //
        if(0==strcmp("-u", argv[arg]) || 0==strcmp("--usepyr", argv[arg]))
        {
            usepyr = 1;
            ++arg;
        }
        else if(0==strcmp("-i", argv[arg]) || 0==strcmp("--input", argv[arg]))
        {
            if(arg+1 < argc)
            {
                //
                sscanf(argv[arg+1], "%s", input);
                arg = arg + 2;
            }
            else
            {
                printf("# missing argument after '%s'\n", argv[arg]);
                return 1;
            }
        }
        else if(0==strcmp("-o", argv[arg]) || 0==strcmp("--output", argv[arg]))
        {
            if(arg+1 < argc)
            {
                //
                sscanf(argv[arg+1], "%s", output);
                arg = arg + 2;
            }
            else
            {
                printf("# missing argument after '%s'\n", argv[arg]);
                return 1;
            }
        }

尝试运行并检查来自here的示例代码的结果

谢谢

【问题讨论】:

  • 显示说明命令选项的代码并不能帮助这里的任何人帮助您解决问题。您应该发布解析命令行的代码。
  • 一,你不认为你应该展示你的命令行解析代码吗?二,“我的序列就像 E:\1.jpg D:\”,嗯,用法上说命令行需要-i-o,那么你真的将这些开关传递到命令行吗?
  • Invalid command line argument。您声称这是错误,但您的代码从不输出该字符串。您是否显示所有代码?另外,请准确显示您正在使用的命令行。
  • 准确显示您正在使用的命令行。第三次问这个。您显示的命令行没有-i-o 开关。目前尚不清楚是因为你没有证明这一点,还是你真的把这些都漏掉了。

标签: c++ c visual-studio-2015 computer-vision


【解决方案1】:

部分问题是:argv[0] 是正在执行的程序的名称。

argv[1] 是第一个命令行参数(它应该是-i-o)。

一般情况下,不使用任何命令行快捷功能,如getopt()

代码需要做的第一件事是确保存在所需的命令行参数。 (根据您发布的代码,argc 需要为 5)

然后,在一个循环中,检查 argv[x],(其中x 是 1 或 3)是 -o 还是 -i

然后,根据检查的结果,

获取 argv[x+1] 作为输入文件或输出文件。

循环执行所有这些检查

按顺序进行检查,就像代码所做的那样,对参数的顺序做出很多假设,并忽略检查以确保参数有效。

I.E.永远不要相信用户输入,总是要彻底检查它的有效性

建议在只允许单个字符参数的情况下让代码正常工作,然后修改代码以允许 --longname 参数

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2017-06-19
    • 2013-06-05
    • 2015-06-03
    相关资源
    最近更新 更多