为什么我的C++ main()不接受我的参数

问题描述:

我有一个在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可能会消耗你输入的参数。 –

所以你有一个shell脚本runtest.sh,看来。在这里面,你可能有这样的线路(路径可能不仅仅是./东西长):

./UICommTest "$1" "$2" 

这应该是显而易见的是,这会给你的程序只有2个参数。该行改成这样:

./UICommTest "[email protected]" 

注:使用"[email protected]"是很重要的细节,它具有特殊的功能,从而扩展到"$1" "$2" "$3" ...等同。引号是重要的,所以如果你传递一个带空格的参数,它仍然是一个参数。