2015-12-08 69 views
-4

使用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 检查样本代码的结果谢谢你的问题

+2

显示,说什么的命令选项是代码不会帮助任何人在这里帮助你解决问题。您应该发布解析命令行的代码。 – JJF

+0

我不明白你的问题。你问我们为什么你的代码打印,你已经通过了无效的命令行参数?因为你应该知道最好的。或者你是否从命令行调用'cl.exe'并将它传递给一些JPG文件? – szczurcio

+0

@szczurcio它只是D:\\不是路径,我改了它 – ARG

回答

0

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

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

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

代码需要做的第一件事就是确保所需的命令行参数存在。 (每您的贴代码,的argc需要是5)

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

然后,根据该检查的结果,

获取的argv [X + 1]作为任一输入文件或输出文件。

不要在一个循环

做在一个序列检查所有这些检查,因为代码是干什么的,赚了很多有关的参数的顺序假设,忽视了检查,以确保参数是有效的。

I.E.从不信任用户的输入,总是完全检查其有效性

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