c++ - 为什么用 %20 程序崩溃替换空格?

标签 c++ string

我写了下面的代码,用字符串 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/

相关文章:

c - 在C中合并两个已排序的字符串数组

Java正则表达式匹配包含特殊字符的整个单词

c - 从 C 中的多个整数创建 String(char*)

c++ - 将函数分配给 std::function 类型时调用哪个函数原型(prototype)(以及如何调用)?

c++ - 模板函数特化的内部编译器错误

c++ - Directx 访问后台缓冲区

java - 如何在java中将多个整数作为以空格分隔的单个输入,然后将它们分解成整数?

c++ - std::auto_ptr 的最佳实践

c++ - 在 C++ 中向 std::vector 添加任意数量的元素的最有效方法是什么?

c - 在 C 中打印字符串的所有排列