2017-04-11 59 views
0

我想以编程方式执行以下任务。如何从C++代码打开一个单独的终端程序?

  1. 在C++中,打开一个终端(系统( “侏儒端”);)
  2. 在C++中, 运行

这里是位于一些地方(./myprogram)中的程序我的代码

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

但它给运行时带来以下错误。

sh: 0: Illegal option - 
+2

第二个'strcpy'会覆盖第一个'strcpy'。你为什么不使用'std :: string?' – Quentin

回答

0

旁边的事实,有可能更优雅的解决方案不是通过C++执行PROGRAMM你可以用其中的一个去调用终端:

的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()