|
|
@ -112,10 +112,12 @@ void String::copyData(const char *source, int sourceLength) { |
|
|
|
this->data = nullptr; |
|
|
|
this->data = nullptr; |
|
|
|
length = 0; |
|
|
|
length = 0; |
|
|
|
allocSize = 0; |
|
|
|
allocSize = 0; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 如果源字符串长度超过了本对象已分配的字符数组大小则重新分配长度合适的字符数组
|
|
|
|
// 如果源字符串长度超过了本对象已分配的字符数组大小则重新分配长度合适的字符数组
|
|
|
|
if (allocSize < sourceLength) { |
|
|
|
if (allocSize <= sourceLength) { |
|
|
|
allocSize = sourceLength + 1; |
|
|
|
allocSize = sourceLength + 1; |
|
|
|
|
|
|
|
|
|
|
|
delete[] data; |
|
|
|
delete[] data; |
|
|
@ -155,7 +157,7 @@ void String::addString(const char *source, int sourceLength) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 如果拼接后字符长度超过已分配的内存大小,则重新分配data内存大小
|
|
|
|
// 如果拼接后字符长度超过已分配的内存大小,则重新分配data内存大小
|
|
|
|
if (allocSize < (length + sourceLength + 1)) { |
|
|
|
if (allocSize <= (length + sourceLength + 1)) { |
|
|
|
// 保存拼接前的原数据,以便重新分配足够的内存
|
|
|
|
// 保存拼接前的原数据,以便重新分配足够的内存
|
|
|
|
char *old = new char[length + 1](); |
|
|
|
char *old = new char[length + 1](); |
|
|
|
strcpy(old, data); |
|
|
|
strcpy(old, data); |
|
|
|