2017-04-11 9 views
0

以下のタスクをプログラムで実行します。C++コードとは別のターミナルでプログラムを開くにはどうすればよいですか?

C++で
  1. 、端末を開く(システム( "GNOME末端");)C++、 で
  2. は、いくつかの場所(./myprogram)に位置するプログラムを実行

こちら私のコード

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

しかし、実行時に次のエラーが発生します。

のstd ::文字列

:あなたはこれらのいずれかで行くことができるプログラムの開発を実行するためにC++を経由して端末を起動するよりもエレガントな解決策があるかもしれないという事実のほかに

sh: 0: Illegal option - 
+2

第2の 'strcpy'は最初のものを上書きします。なぜ 'std :: string? 'を使っていないのですか? – Quentin

答えて

0

最も明白な解決策は、オーバーロードされた演算子+を連結文字列に提供する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()を参照してください。

関連する問題