我试图复制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;
}
然而,使用该代码,我的应用程序有时会在向右移动字符时崩溃。
有人可以指出我可能会遇到什么问题以及如何解决这个问题?
非常感谢你!
答案 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;
}