system()中的变量调用C ++

时间:2015-06-07 07:55:01

标签: c++ arguments system

我在argv [1]中有一个变量,我需要以这种方式在另一个c ++文件中调用:

        system("./assemblerL.out", argv[1]);

以上是不正确的语法,因为我得到“太多参数”错误。

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:4)

system只能使用一个参数,这就像在shell中输入的整行一样 (好吧,不是像Bash那样的贝壳所有东西,但这在这里无关紧要)。

使用C ++,只需使用std::string来连接部分:

system((std::string("./assemblerL.out ") + argv[1]).c_str());  

或者,更具可读性:

std::string line = "./assemblerL.out ";
line += argv[1];
system(line.c_str());  

请务必在使用前确保argv[1]存在。

答案 1 :(得分:1)

尝试将命令合并为单个字符串,然后调用系统,如:

char ch[50]="";
strcat(ch,"./assemblerL.out ");
strcat(ch,argv[1]);
system(ch); 

答案 2 :(得分:1)

std::system只接受一个参数,该参数必须是您要执行的完整字符串。请注意,如果这是Linux,则通过调用子shell来实现结果,因此可能会发生扩展/替换。您可能需要考虑exec函数行。对于Windows,您可能需要调查CreateProcess。

您可以选择构建命令行:

// c-like
char buffer[1024];
snprintf(buffer, sizeof(buffer), "%s %s", "command", "argument");
system(buffer); // could be truncated

// c++ string based
std::string commandline = std::string(command) + std::string(argument);
system(commandline.c_str());

// stringbuffer
#include <sstream>
std::ostringstream buf;
buf << command << " " << argument;
system(buf.str().c_str());