如何在c ++代码的单独终端中打开程序?

时间:2017-04-11 10:03:28

标签: c++ ubuntu gnome-terminal

我想以编程方式执行以下任务。

  1. 在C ++中,打开终端(系统(“gnome-terminal”);)
  2. 在C ++中, 运行位于某个地方的程序(./myprogram)
  3. 这是我的代码

    strcpy(args, "gnome-terminal");
    strcpy(args, "-e 'sh ./spout");
    strcat(args, "' ");
    system(args);
    

    但它在运行时出现以下错误。

    sh: 0: Illegal option -
    

1 个答案:

答案 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()