在c ++中调用system()的问题

时间:2016-05-19 09:07:25

标签: c++ c++11 console system

我尝试在c ++应用中使用system() 如果我这样做,它的效果非常好:

system("notepad");

但是当我尝试这样做时它会出错:

cin >> cmdlol;  
system(cmdlol);

错误:

  

无法转换' std :: string {aka std :: basic_string}'到#const;   字符*'争论' 1' to' int system(const char *)' |

2 个答案:

答案 0 :(得分:11)

cmdlol标注为std::string,无法隐式转换为const char*。并且std::system仅接受const char*作为其参数,这就是编译器抱怨的原因。

您可以明确使用std::basic_string::c_str()

system(cmdlol.c_str());

关于为什么system("notepad");效果很好,"notepad"string literal类型const char[8](包括空字符),请注意它不是std::string并且可能会衰减传递给const char*std::system

答案 1 :(得分:4)

std::system想要一个const char*,这是一个C风格的数组。

要将std :: string转换为const char*,您可以使用函数c_str()

system(cmdlol.c_str());