2016-05-19 15 views
2

に私はそれが好きならば、それは非常にうまく機能C++アプリ でsystem()を使用しようとしたシステムを()の呼び出し:問題C++

system("notepad"); 

をしかし、私は好きですしようとすると、エラーを与える:

cin >> cmdlol; 
system(cmdlol); 

エラー:

cannot convert 'std::string {aka std::basic_string}' to 'const char*' for argument '1' to 'int system(const char*)'|

+1

システムには多くの問題があります。 – Vincent

+6

文字列を読み込んで 'system'に渡すことは、セキュリティ上の大きなリスクになることに注意してください。 – TartanLlama

+1

@TartanLlamaはい、すべてのシェルを禁止します。 –

答えて

11

cmdlolstd::stringするseemes、暗黙的にconst char*に変換することはできません。そして、std::systemは、その引数としてconst char*しか受け付けません。そのため、コンパイラは不平を言います。

std::basic_string::c_str()を明示的に使用できます。

system(cmdlol.c_str()); 

そしてsystem("notepad");がうまく機能する理由について、"notepad"は(ヌル文字を含む)タイプconst char[8]string literalあるが、それはstd::stringではありません注意してstd::systemに渡されたときconst char*に減衰することがあります。

+0

Yay!それは働いてくれてありがとう、新しい質問があるので11分でこの答えを受け入れることができます。 – Mudzay

4

std::systemは、const char*が必要です。これはCスタイルの配列です。

std :: stringをconst char*に変換するには、関数c_str()を使用します。

system(cmdlol.c_str());