我收到以下错误与此代码:

string folder;
getline(cin, folder);

string folder2 = folder + "/index.txt";
const char* oldhtml[] = { folder2.c_str() };
folder2 = folder + "/index.html";
const char* newhtml[] = { folder2.c_str()};
rename(oldhtml, newhtml);

错误发生于:rename(oldhtml, newhtml);
我对C++相当陌生。所以,如果这是一个简单的解决方法,我深表歉意

最佳答案

看来您不明白这一行:

const char* oldhtml[] = { folder2.c_str() };

该数组声明一个长度为1的数组。array元素是一个指针,该指针使用folder2.c_str()的结果进行初始化(可能指向字符串的内部存储)。

但是,然后在下一行更改folder2。这会使以前对c_str的任何调用的结果无效,因此oldhtml[0]现在是一个悬空指针。

编写此代码的更好方法是始终使用string:
string oldhtml = folder + "/index.txt";
string newhtml = folder + "/index.html";
rename(oldhtml.c_str(), newhtml.c_str());

09-30 12:45