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

How do i open a program in a separate terminal from c++ code?

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

  1. 在 C++ 中,打开终端 (system("gnome-terminal");)
  2. 在 C++ 中, 运行 位于某个地方的程序 (./myprogram)

这是我的代码

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

但它在 运行 时间给出了以下错误。

sh: 0: Illegal option -

除了可能有比通过 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()