2016-11-21 90 views
-1

我有一個在Fedora 20中運行的C++程序。當我通過main()啓動它時,它可以不帶任何參數或一個參數。現在我需要更多的參數,但不知何故,它拒絕採用新的參數。爲什麼我的C++ main()不接受我的參數

這是我如何啓動它:

$ ./runtest.sh IRE 22 33

這是最主要的()內的第一行COUT:

UICommTest開始... argc = 2

我期望argc = 4。

這是我的主要():

int main(int argc, char*argv[]) 
{ 

    std::cout << "UICommTest is starting ... argc="<< argc << std::endl; 

    if(argc == 1) 
    { 
     UICommTest::startTest(false); 
    } 
    else if(argc == 2) 
    { 
     if(string(argv[1]) == "true") 
     { 
      UICommTest::startTest(true); 
     } 
     else if(string(argv[1]) == "ire") 
     { 
      UICommTest::startTestIRE("-1", "-1"); 
     } 
     else 
     { 
      std::cout << "Usage:: ..." << std::endl; 
     } 
    } 
    else if(argc == 4) 
    { 
     if(string(argv[1]) == "ire") 
     { 
      UICommTest::startTestIRE(argv[2], argv[3]); 
     } 
     else 
     { 
      std::cout << "Usage:: ..." << std::endl; 
     } 
    } 
    else 
    { 
     std::cout << "Usage:: ..." << std::endl; 
    } 

    return EXIT_SUCCESS; 
} 

我做清潔,使幾次。我相信新的變化是有的。任何人都可以爲此提供幫助?

+3

runtest.sh是一個shell腳本或程序的名稱? – Fefux

+7

確保'runtest.sh'調用包含所有參數的可執行文件。簡單的例子'exec a.out $ *' –

+5

你的sh可能會消耗你輸入的參數。 –

回答

4

所以你有一個shell腳本runtest.sh,看來。在這裏面,你可能有這樣的線路(路徑可能不僅僅是./東西長):

./UICommTest "$1" "$2" 

這應該是顯而易見的是,這會給你的程序只有2個參數。該行改成這樣:

./UICommTest "[email protected]" 

注:使用"[email protected]"是很重要的細節,它具有特殊的功能,從而擴展到"$1" "$2" "$3" ...等同。引號是重要的,所以如果你傳遞一個帶空格的參數,它仍然是一個參數。

相關問題