我在这段代码中遇到了这个错误:
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 的数组。数组元素是一个指针,用 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());
关于c++ - 类型 "const char **"的参数与类型 "const char *"的参数不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31317619/