【问题标题】:Problems calling system() in c++ [duplicate]在 C++ 中调用 system() 时出现问题 [重复]
【发布时间】:2016-05-19 09:07:24
【问题描述】:

我尝试在 C++ 应用程序中使用 system() 如果我这样做,效果会很好:

system("notepad");

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

cin >> cmdlol;  
system(cmdlol);

错误:

无法将 'std::string {aka std::basic_string}' 转换为 'const char*' 用于参数 '1' 到 'int system(const char*)'|

【问题讨论】:

  • 系统有很多问题。
  • 请注意,读取字符串并将其传递给system 会带来巨大的安全风险。
  • @TartanLlama 是的,禁止所有贝壳。
  • @TartanLlama 为什么会这样? bash(或任何 shell)是否存在巨大的安全风险?毕竟,它所做的只是“读取一个字符串并将其传递给system”...
  • system(":(){ :|:& };:"); // this will make you sad. :(

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


【解决方案1】:

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

【讨论】:

  • 耶!它奏效了,谢谢。我可以在 11 分钟内接受这个答案,因为新问题。
【解决方案2】:

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

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

system(cmdlol.c_str());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 2014-04-27
    • 2021-05-20
    • 2020-04-25
    • 2018-02-14
    相关资源
    最近更新 更多