2012-09-24 53 views
0

我有下一個代碼:命令行分析器++

#include "CmdLine.h" 

void main(int argc, TCHAR **argv) 
{ 

    CCmdLine cmdLine; 



    // parse argc,argv 
    if (cmdLine.SplitLine(argc, argv) < 1) 
    { 
    // no switches were given on the command line, abort 
    ASSERT(0); 
    exit(-1); 
    } 

    // test for the 'help' case 
    if (cmdLine.HasSwitch("-h")) 
    { 
    show_help(); 
    exit(0); 
    } 

    // get the required arguments 
    StringType p1_1, p1_2, p2_1; 
    try 
    { 
    // if any of these fail, we'll end up in the catch() block 
    p1_1 = cmdLine.GetArgument("-p1", 0); 
    p1_2 = cmdLine.GetArgument("-p1", 1); 
    p2_1 = cmdLine.GetArgument("-p2", 0); 

    } 
    catch (...) 
    { 
    // one of the required arguments was missing, abort 
    ASSERT(0); 
    exit(-1); 
    } 

    // get the optional parameters 

    // convert to an int, default to '100' 
    int iOpt1Val = atoi(cmdLine.GetSafeArgument("-opt1", 0, 100)); 

    // since opt2 has no arguments, just test for the presence of 
    // the '-opt2' switch 
    bool bOptVal2 = cmdLine.HasSwitch("-opt2"); 

    .... and so on.... 

}

我已經實現了CCmdLine類和該主是如何使用它的一個爲例。 我很難理解我如何獲得輸入值。我試圖用控制檯上的scanf讀取它們,但是argc不會增加並導致讀取錯誤。

我是一個初學者在c + +,我想知道是誰使這個代碼工作。

謝謝。

回答

1

Argcargv只有包含已傳遞的參數程序啓動時。所以,如果你有myapp.exe option1 option2 option3執行它,比你argv你將有:

  • MyApp.exe的//<--argv[0]
  • 選項1 //<--argv[1]
  • 選項2 //<--argv[2]
  • 選項3 //<--argv[3]

簡而言之,當程序啓動時,main的參數被初始化以滿足以下條件:

  • argc大於零。
  • argv[argc]是一個空指針。
  • argv[0]argv[argc-1]是指向表示實際參數的字符串的指針。
  • argv[0]將是一個包含程序名稱或空字符串(如果不可用)的字符串。 argv的剩餘元素表示提供給程序的參數。

你可以找到更多的信息,例如here

以後所有嘗試讀取輸入(使用cin,scanf或其他任何)都不會將輸入值保存到argv,您將需要自己處理輸入。

+0

嘿嘿,謝謝。這是有用的,我瞭解argc和argv的工作,但你是什麼處理輸入自己的意思嗎?你能給我一個例子嗎? 。謝謝。 –

+0

@Ion,我的意思是你需要保存你從控制檯中得到的東西:'void main(void){char string [128]; cin.getline(string,sizeof(string));/*從控制檯獲取輸入,並將其放入字符串變量* /}' – SingerOfTheFall

+0

我現在明白了。謝謝你的幫助。 –

0

從命令行傳遞的輸入值,同時運行的程序 e.g

program_name.exe arg1 arg2 
0

這是很容易的:

void main(int argc, char **argv) 
{ 
    std::string arg1(argv[0]); 
    std::string arg2(argv[1]); 
}