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

时间:2016-11-21 15:01:03

标签: c++

我有一个在Fedora 20中运行的C ++程序。当我通过main()启动它时,它不需要参数或一个参数。现在我需要更多参数,但不知何故,它拒绝接受新参数。

这是我开始的方式:

$ ./runtest.sh ire 22 33

这是main()中的第一行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;
}

我做了几次清洁并做了几次。而且我确信新的变化已经存在。任何人都可以帮忙解决这个问题吗?

1 个答案:

答案 0 :(得分:4)

好像你有一个shell脚本runtest.sh。在其中你可能有这样的一行(路径可能比./更长):

./UICommTest "$1" "$2"

很明显,这会给你的程序只有2个参数。将该行更改为:

./UICommTest "$@"

注意:使用"$@"是重要的细节,它具有特殊功能,它扩展到相当于"$1" "$2" "$3" ...。引号很重要,因此如果传递带空格的参数,它仍然作为一个参数保留。