首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用string::insert(迭代器它,char c)的程序中的运行时错误

使用string::insert(迭代器它,char c)的程序中的运行时错误
EN

Stack Overflow用户
提问于 2020-04-01 08:51:34
回答 1查看 366关注 0票数 0

下面是一个C++片段,它在字符串中的每个字符之前插入一个点.

这是我的密码:

代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin >> s;

    for (auto it = s.begin(); it != s.end(); it++)
    {
          s.insert(it, '.');
          it++;
    }

    cout << s;
}

在这里,我使用迭代器,在字符前面插入.之后。我在递增迭代器,因为insert方法将迭代器设置为插入新字符的位置。

但是发生了一些奇怪的事情,我得到了一些输入的运行时错误:

例如:

代码语言:javascript
复制
Input: abcde
Output: .a.b.c.d.e

Input: abcdef
Output: .a.b.c.d.e.f

Input: abcdefg
Output: .a.b.c.d.e.f.g

Input: abcdefgh
Output: Getting runtime error 

~~Dr.M~~ Error #1: UNADDRESSABLE ACCESS beyond heap bounds: reading 0x10fb4fa7-0x10fb4fa8 1 byte(s)
~~Dr.M~~ # 0 replace_memmove                                            [d:\drmemory_package\drmemory\replace.c:802]
~~Dr.M~~ # 1 std::char_traits<>::move                                   [C:/Programs/mingw-w64-7/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/char_traits.h:342]
~~Dr.M~~ # 2 std::__cxx11::basic_string<>::_S_move                      [C:/Programs/mingw-w64-7/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/basic_string.h:349]
~~Dr.M~~ # 3 std::__cxx11::basic_string<>::_M_replace_aux               [C:/Programs/mingw-w64-7/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/bits/basic_string.tcc:407]
~~Dr.M~~ # 4 std::__cxx11::basic_string<>::insert      

我无法理解为什么会发生这种情况,请帮助我。

注意:我知道解决这个问题还有其他的方法,但我很想知道这里发生了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-01 09:01:32

插入方法将迭代器设置为插入新字符的位置。

不,它没有,它将迭代器返回给插入的字符。尝尝这个

代码语言:javascript
复制
it = s.insert(it, '.');
it++;

或者更简单

代码语言:javascript
复制
it = s.insert(it, '.') + 1;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60966998

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档