在c [duplicate]中调用system()的问题

这个问题在这里已有答案:

我尝试在一个c应用程序中使用 system() ,如果我这样做,它可以很好地工作:

system("notepad");

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

cin >> cmdlol;  
system(cmdlol);

错误:

无法将'std :: string '转换为'const char *'以将参数'1'转换为'int system(const char *)'|

回答(2)

3 years ago

cmdlol seemes为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 并且在传递给 std::system 时可能会衰减为 const char* .

3 years ago

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

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

system(cmdlol.c_str());