2015-12-08 100 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參數