这个问题在这里已有答案:
我尝试在一个c应用程序中使用 system() ,如果我这样做,它可以很好地工作:
system()
system("notepad");
但是当我尝试这样做时它会出错:
cin >> cmdlol; system(cmdlol);
错误:
无法将'std :: string '转换为'const char *'以将参数'1'转换为'int system(const char *)'|
cmdlol seemes为std::string,无法隐式转换为 const char* . 并且std::system仅接受 const char* 作为其参数,这就是编译器抱怨的原因 .
cmdlol
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* .
"notepad"
const char[8]
std::string
std::system
std::system想要一个 const char* ,这是一个C风格的数组 .
要将std :: string转换为 const char* ,可以使用函数 c_str() .
c_str()
2 回答
cmdlol
seemes为std::string,无法隐式转换为const char*
. 并且std::system仅接受const char*
作为其参数,这就是编译器抱怨的原因 .您可以明确使用std::basic_string::c_str() .
关于为什么
system("notepad");
运行良好,"notepad"
是string literal类型为const char[8]
(包括空字符),请注意它不是std::string
并且在传递给std::system
时可能会衰减为const char*
.std::system想要一个
const char*
,这是一个C风格的数组 .要将std :: string转换为
const char*
,可以使用函数c_str()
.