我写了下面的代码,用字符串 r (20%) 替换字符串 s 中的所有空格。例如。 s = "Mr John Smith",运行代码后它应该是 "Mr20%John20%Smith"。
我的代码崩溃了,在我看来像是内存泄漏,但不知道为什么会发生。谢谢。
void ReplaceStr(string &s, string &r)
{
int i = 0;
for(string::iterator it = s.begin(); it != s.end(); it++,i++)
{
if( *it == ' ')
{
s.replace(i,1,r);
}
}
}
最佳答案
replace
的文档说“[a]与此对象相关的任何迭代器、指针和引用可能会失效。”您的迭代器是指向不再存在的字符串版本的迭代器,因此您不能继续递增它、取消引用它、比较它等等。
关于c++ - 为什么用 %20 程序崩溃替换空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165595/