2017-03-20 6 views
0

スペースを含む文字列を含むパラメータを持つlinux std ::システムコールを呼び出す必要があります。 argc/argvを使って正しく処理するために、二重引用符で渡したいと思います。二重引用符で囲まれたパラメータを持つstd :: systemを呼び出す

std :: string cmdline = "myprogram -d \"私はひどいです。

私はこの文字列を私が良い結果を得る場合。

私はstd::system(cmdline) に送信し、私は MYPROGRAMを得る-ef psのを見て、私は私がMYPROGRAMのための単一のパラメータとして「私は文字列だ」維持することができますどのように文字列

だ-d?

答えて

1

問題ありません:

[email protected] /cygdrive/c/Users/dlaru 
$ cat test.cpp 
#include <iostream> 
#include <string> 
#include <cstdlib> 
int main() 
{ 
     std::string cmdline = "./see \"I am a string\""; 
     std::cout << cmdline << std::endl; 
     std::system(cmdline.c_str()); 
} 

[email protected] /cygdrive/c/Users/dlaru 
$ cat see.cpp 
#include <iostream> 
int main(int argc, char* argv[]) 
{ 
     for (int i = 0; i < argc; ++i) 
     { 
       std::cout << argv[i] << std::endl; 
     } 
} 

[email protected] /cygdrive/c/Users/dlaru 
$ g++ -std=c++11 test.cpp -o test 

[email protected] /cygdrive/c/Users/dlaru 
$ g++ -std=c++11 see.cpp -o see 

[email protected] /cygdrive/c/Users/dlaru 
$ ./test 
./see "I am a string" 
./see 
I am a string 

(Cygwinの中でテストした)、それが動作するように

+0

は、私はこのプログラムをテストする、++グラムを使用して、Debianの上だと、あなたがCINを追加し、あなたのプログラムをテスト済み – Dani

+0

を知らせ、見えます>>最後にps -efを実行してください。あなたは正しいです - それは何らかの理由でps -efが文字列から ""を取り除きますが、argvはそれを単一のパラメータとして扱います。 – Dani

+1

@ダニ私はなぜ'ps -ef'dont show '""'は "それ自体が議論ではないと思う。 – ikh

関連する問題