我想以编程方式执行以下任务。
这是我的代码
strcpy(args, "gnome-terminal");
strcpy(args, "-e 'sh ./spout");
strcat(args, "' ");
system(args);
但它在运行时出现以下错误。
sh: 0: Illegal option -
答案 0 :(得分:0)
除了通过C ++调用终端执行程序之外可能有更优雅的解决方案,你可以选择其中一个:
<强>的std :: string 强>
最明显的解决方案是使用std::string
为重载字符串提供重载运算符+
。
#include <string>
std::string args = "gnome-terminal ";
args += "-e 'sh ./spout";
args += "' ";
<强>的std :: stringstream的强>
std::stringstream
是另一种选择:
#include <sstream>
#include <string>
std::stringstream ss;
ss << "gnome-terminal ";
ss << "-e 'sh ./spout";
ss << "' ";
std::string args = ss.str();
<强>的strcat()强>
如果你想使用C字符串,你可以使用这样的东西。请注意,我不建议这样做。
#include <cstring>
strcpy(args, "gnome-terminal");
strcat(args, "-e 'sh ./spout");
strcat(args, "' ");
请注意,第二个版本需要仔细查看args
的已分配内存。有关详细信息,请参阅strcat()。