我使用此代码收到此错误:
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 ++的新手。所以,如果这是一个简单的修复我道歉
答案 0 :(得分:12)
您似乎不明白这一行:
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());
答案 1 :(得分:1)
const char* oldhtml[]
创建一个char*
数组(类似于const char**
),基本上是一个字符串数组(很多char *),当你想要一个字符串(一个且只有一个{ {1}})。
要创建常规指针,请使用:
char*
或const char* oldhtml
。
答案 2 :(得分:-1)
改为使用const char* oldhtml = folder2.c_str()
:无需拥有const char*
数组
请注意,oldhtml
只有folder2
在范围内并且保持不变才有效。哪个不是。你以后修改它。的轰!强>
顺便说一句,如果rename
更改了输入参数,那么程序行为将是未定义的。