1
我一直在試圖寫一個函數的自定義字符串類的一部分(學而不依靠的std :: string來創建自己的字符串類),但我不明白出了什麼問題。C風格的字符串查找和替換功能
void String::FindAndReplace(const char* subString, const char* replaceString)
{
int offset = strlen(replaceString) - strlen(subString);
int subStringIndex = FindSubstring(subString);
char* newString = new char[strlen(m_string) + offset + 1];
strcpy(newString, m_string);
for (int i = subStringIndex + offset; i < strlen(newString); i++)
{
newString[i] = m_string[i - offset];
}
for (int i = subStringIndex; i < strlen(replaceString) + subStringIndex; i++)
{
newString[i] = replaceString[i - subStringIndex];
}
m_string = newString;
}
每次我運行這不僅不會導致期望的字符串,但我得到一堆堆腐敗消息。
字符串是「幫助,我是毛蟲!!」我想用「鳥」代替「毛毛蟲」,字符串變成「幫助,caterpibird !!」然後用我前面提到的錯誤信息退出。
我在這裏做錯了什麼?
'的strcpy(newString,m_string)'複製老的字符串到新的緩衝區,但新的緩衝區不夠大(因爲當'replaceString'比'subString','offset'是負數短) 。你在分配之外摧毀了內存。 –