C ++系统功能"未重新配置为内部或外部命令"

时间:2016-10-07 23:05:12

标签: c++ system

所以这是代码:

#include <iostream>
#include <string>
using namespace std;
int main(){
    cout << "type dir" << endl;
    string command;
    cin >> command;  //typed C:\Java
    const char* cml = ("cd C:" + command).c_str();
    system(cml);
    cout << "[System]: Set!";
}

以下是结果:

'exe' is not recognized as an internal or external command,
operable program or batch file.

如果我只输入system(&#34; cd C:\ Java&#34;);那么它可以工作。但是如果我将const char传递给上面的系统函数,我会收到一个错误,即exe没有重新调整。

1 个答案:

答案 0 :(得分:3)

这是未定义的行为:

const char* cml = ("cd C:" + command).c_str();

正在使用来自作为连接结果返回的cml的C字符串指针初始化std::string变量。但是,此结果是在此语句结束后丢弃的临时变量。因此,cml之前的字符数组指针已经在此行之后被释放。

以下内容确实保留了连接结果,以便在下一个语句中使用:

string cml = "cd C:" + command
system(cml.c_str())