2013-02-11 18 views
6

C++プログラムの引数を使用してコマンドラインプログラムを実行するにはどうすればよいですか?C++コマンドライン引数を使用して別のプログラムを実行するプログラム

http://www.cplusplus.com/forum/general/15794/

std::stringstream stream; 
stream <<"program.exe "<<cusip; 
system(stream.str().c_str()); 

しかし、実際のプログラムの場所を受け入れていないようですので、私はこれを適用するかどうかはわからない:これは私がオンラインに見つけたものです。

std::stringstream stream; 
stream <<"C:\Tests\SO Question\bin\Release\HelloWorld.exe "<<"myargument"; 
system(stream.str().c_str()); 

これは、バックスラッシュに関するいくつかの警告を表示します。プログラムが動作しません。あなたは、特定の場所にプログラムを持っていることを期待していますか?

これは私がコンソールに出力され得る:

「C:\テストは、」は、内部コマンドまたは外部コマンドとして認識されない、 操作可能なプログラムまたはバッチファイル。

補遺:

だからジョンの答えに基づいて、私のために正しいバージョンは次のようになります。これは、バックスラッシュに関連するいくつかの警告を与え

#include <iostream> 
#include <cstdlib> 
#include <sstream> 
#include <cstring> 
int main(int argc, char *argv[]) 
{ 

std::stringstream stream;  
stream << "\"C:\\Tests\\SO Question\\bin\\Release\\HelloWorld.exe\"" 
     << " " // don't forget a space between the path and the arguments 
     << "myargument"; 
system(stream.str().c_str()); 

return 0; 
} 
+0

であるあなたが書くために必要なものを、C++の文字列リテラル内でエスケープするためにはstdするシステム(...)からの標準出力をリダイレクトする方法任意のアイデア::文字列またはSTD ::にstringstreamを必要とします? – Pupsik

+1

@Pupsikシステム関数はintを返します。明らかに、使用しているオペレーティングシステムのステータスコードを知っている必要があります。「コマンドがヌルポインタでない場合、返される値はシステムとライブラリの実装によって異なりますが、一般的には、サポートされていれば、いわゆるコマンドです。 - http://www.cplusplus.com/reference/cstdlib/system/から返されたintに基づいて適切なエラーメッセージを生成することができます。 – Stepan1010

+0

何ですか?あなたは私のコメントを読んだのですか? – Pupsik

答えて

9

最初に、ダブルバックスラッシュをリテラル文字列に使用すると、実際の文字列値に単一のバックスラッシュを表示する必要があります。これは言語の文法に従います。準拠しているコンパイラはこれについて約警告より悪い可能性があります。

いずれの場合でも、発生している問題は、スペースを含むパスをWindowsで二重引用符で囲む必要があるためです。二重引用符以来自体は

stream << "\"C:\\Tests\\SO Question\\bin\\Release\\HelloWorld.exe\"" 
     << " " // don't forget a space between the path and the arguments 
     << "myargument"; 
+0

ありがとうございました。これは問題を解決します。 – Stepan1010

5

私は\\\を使用しているC++のエスケープ文字だと信じていますが、おそらくこの問題を解決するでしょう。

+1

また、コードはこの情報を記述したvarの代わりに "myarguments"という文字列を渡します。思惑通り。 –

関連する問題