复制std :: string :: insert(int pos,char ch)

时间:2017-10-20 22:48:41

标签: c++ string pointers

我试图复制std :: string :: insert方法。 这是我的代码。

string& string::insert(int pos, char ch)
{
    int len = m_length; //the length of the current string
    resize(++m_length); //a method to resize the current string(char *) 
    char *p = m_data + pos; //a pointer to the string's insert position 
    for (int i = len-1; i >= 0; i--) { //shift characters to the right
        p[i+1] = p[i];
    }
    *p = ch; //assign the character to the insert position
    m_data[m_length] = '\0'; //finish the string
    return *this;
}

然而,使用该代码,我的应用程序有时会在向右移动字符时崩溃。

有人可以指出我可能会遇到什么问题以及如何解决这个问题?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

你的角色太多了。您只需要移动len - pos个字符,而不是len个字符。

如果在初始化i时没有减去1,则循环将移动现有的空字节,因此您不需要在最后单独添加它。

string& string::insert(int pos, char ch)
{
    int len = m_length; //the length of the current string
    resize(++m_length); //a method to resize the current string(char *) 
    char *p = m_data + pos; //a pointer to the string's insert position 
    for (int i = len - pos; i >= 0; i--) { //shift characters to the right
        p[i+1] = p[i];
    }
    *p = ch; //assign the character to the insert position
    return *this;
}