我有一个在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;
}
我做了几次清洁并做了几次。而且我确信新的变化已经存在。任何人都可以帮忙解决这个问题吗?
答案 0 :(得分:4)
好像你有一个shell脚本runtest.sh
。在其中你可能有这样的一行(路径可能比./
更长):
./UICommTest "$1" "$2"
很明显,这会给你的程序只有2个参数。将该行更改为:
./UICommTest "$@"
注意:使用"$@"
是重要的细节,它具有特殊功能,它扩展到相当于"$1" "$2" "$3" ...
。引号很重要,因此如果传递带空格的参数,它仍然作为一个参数保留。