gpt4 book ai didi

c++ - 第二个参数在命令行参数中不起作用

转载 作者:行者123 更新时间:2023-11-30 21:29:07 26 4
gpt4 key购买 nike

使用 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 中的示例代码的结果

enter image description here谢谢

最佳答案

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

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

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

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

然后,在循环中检查 argv[x](其中 x 为 1 或 3)是否为 -o-i.

然后,根据检查结果,

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

循环执行所有这些检查

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

即永远不要相信用户输入,始终彻底检查其有效性

建议让代码正常工作,同时只允许单个字符参数,然后修改代码以允许 --longname 参数

关于c++ - 第二个参数在命令行参数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34165356/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com