所以这是代码:
#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没有重新调整。
答案 0 :(得分:3)
这是未定义的行为:
const char* cml = ("cd C:" + command).c_str();
正在使用来自作为连接结果返回的cml
的C字符串指针初始化std::string
变量。但是,此结果是在此语句结束后丢弃的临时变量。因此,cml
之前的字符数组指针已经在此行之后被释放。
以下内容确实保留了连接结果,以便在下一个语句中使用:
string cml = "cd C:" + command
system(cml.c_str())