第二个参数在命令行参数中不起作用
Second argument is not working in command line argument
使用 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
的示例代码的结果
谢谢
部分问题是:argv[0] 是正在执行的程序的名称。
argv[1] 是第一个命令行参数(它应该是 -i
或 -o
)。
一般情况下,不使用任何命令行快捷功能,如getopt()
、
代码需要做的第一件事是确保存在所需的命令行参数。 (根据您发布的代码,argc 需要为 5)
然后,在一个循环中,检查 argv[x](其中 x
是 1 或 3)是否是 -o
或 -i
。
然后,根据检查的结果,
获取 argv[x+1] 作为输入文件或输出文件。
循环执行所有这些检查
按顺序进行检查,就像代码所做的那样,是对参数的顺序做出大量假设并忽略检查以确保参数有效。
即永远不要相信用户输入,总是完全检查它的有效性
建议在仅允许单个字符参数的情况下使代码正常工作,然后修改代码以允许 --longname
个参数
使用 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
的示例代码的结果部分问题是:argv[0] 是正在执行的程序的名称。
argv[1] 是第一个命令行参数(它应该是 -i
或 -o
)。
一般情况下,不使用任何命令行快捷功能,如getopt()
、
代码需要做的第一件事是确保存在所需的命令行参数。 (根据您发布的代码,argc 需要为 5)
然后,在一个循环中,检查 argv[x](其中 x
是 1 或 3)是否是 -o
或 -i
。
然后,根据检查的结果,
获取 argv[x+1] 作为输入文件或输出文件。
循环执行所有这些检查
按顺序进行检查,就像代码所做的那样,是对参数的顺序做出大量假设并忽略检查以确保参数有效。
即永远不要相信用户输入,总是完全检查它的有效性
建议在仅允许单个字符参数的情况下使代码正常工作,然后修改代码以允许 --longname
个参数