C++ 如何使用字符串::替换为字符*

C++ 如何使用字符串::替换为字符*,c++,string,visual-c++,std,C++,String,Visual C++,Std,我试图用char*替换子字符串,strng::replace拒绝接受任何不是常量字符串的内容* map<string,char *> renamed_files; map<string,char *>::iterator rename_it; 不,地图上的键是const。因此问题在于rename\u it->first是常量,而replace当然是非常量成员函数 如果您以某种方式对其进行修改,则会更改条目在地图中的正确位置,但地图无法检测到您正在更改字符串,

我试图用char*替换子字符串,strng::replace拒绝接受任何不是常量字符串的内容*

   map<string,char *> renamed_files;
   map<string,char *>::iterator rename_it;

不,地图上的键是const。因此问题在于
rename\u it->first
是常量,而
replace
当然是非常量成员函数

如果您以某种方式对其进行修改,则会更改条目在地图中的正确位置,但地图无法检测到您正在更改字符串,因此无法移动条目。为了避免整个问题,禁止修改


您可以删除该条目,然后添加具有不同键但值相同的新条目。执行此操作时,请注意迭代器的有效性。

否,映射中的键是const。因此问题在于
rename\u it->first
是常量,而
replace
当然是非常量成员函数

如果您以某种方式对其进行修改,则会更改条目在地图中的正确位置,但地图无法检测到您正在更改字符串,因此无法移动条目。为了避免整个问题,禁止修改


您可以删除该条目,然后添加具有不同键但值相同的新条目。在执行此操作时,请注意迭代器的有效性。

您指的是const char*。。正确的?为什么不使用const_cast将char*转换为const char*?您真的想更改密钥吗?即使如此,我还是尝试进行字符串替换,它根本不是编译,它给我的错误是string::replace无法识别11种重载类型中的任何一种。另外,在上面的代码中,
strpath
是用垃圾初始化的,因为
cPath
是垃圾。这不可能是你的意图。@johndilling:我想换钥匙,你说得对。这是一种糟糕的编码。但是,cPath在程序的其他地方被修改了,但是我没有提到它。你是说const char*。。正确的?为什么不使用const_cast将char*转换为const char*?您真的想更改密钥吗?即使如此,我还是尝试进行字符串替换,它根本不是编译,它给我的错误是string::replace无法识别11种重载类型中的任何一种。另外,在上面的代码中,
strpath
是用垃圾初始化的,因为
cPath
是垃圾。这不可能是你的意图。@johndilling:我想换钥匙,你说得对。这是一种糟糕的编码。但是,cPath在程序的其他地方被修改了,但是我没有提到它。
   rename_it = renamed_files.begin();
   char cPath[1024];
   string strpath = cPath;
   rename_it->first.replace(0,len, strpath);