2016-06-21 15 views
1

コマンドの文字列があります。例: start C:\Users\...\test application.exe に空白を含むパスがあります。空白を含むパスでプログラムを開始する

system(command.c_str()); 

しかし、問題は、パスにスペースが含まれているので、それが起動doesntの、次のとおりです。
は今、私はそれを起動するsystem()機能を使用します。 これを修正するにはどうすればよいですか?

+5

すべてのコマンドは、ウィンドウ内にスペースを入れて、 '" "で囲む必要があります。 – NathanOliver

+1

パスを引用します。引用符を文字列リテラルで設定する場合は、引用符をエスケープしてください。 – drescherjm

+0

「C:\ Users ... \ test application.exe」を起動すると、これがコメントされても動作しません。どのように動作しているのかわかりません:/ – Shedex

答えて

5

これを修正するにはどうすればよいですか?

あなたが知る必要がある最初の事はsystem()は、コマンドを実行するためにシェルを使用して、パスにスペースが含まれている場合、シェルは、あなたが""でプログラムパスを囲むために望んでいることです。 (と古いC++標準の)それ以外の場合は

std::string command = R"("C:\Users\test application.exe")"; 
system(command.c_str()); 

、あなたは特殊文字のすべてをエスケープする必要があります:現在のC++の標準を使用して

は、修正するための最も簡単な方法は、raw string literal使用することです

std::string command = "(\"C:\\Users\\test application.exe\")"; 
        //^^ ^     ^
+0

@Cody私はこの処方がより良いと思います。 –

+0

@Cody Hmm、それはひどい裂け目です。このような状況では、ITMというユースケースは見当たりません。 –

+1

@Codyああ、私はすでに言及しました。 –

関連する問題