Я пишу строковый класс с нуля как часть назначения класса, и у меня возникают проблемы с написанием функции подстроки.Из того, что я могу сказать, это имеет отношение к массиву символов, инициализирующему неправильный размер.
Из того, что я могу сказать, все остальное в строковом классе работает прекрасно.Я пишу это в Qt creator на Ubuntu.
string string::substring(unsigned int startIndex, unsigned int endIndex) const {
if (startIndex >= endIndex) {
string s;
return s;
}
if (endIndex > length) endIndex = length;
int rlength = endIndex - startIndex;
char* r = new char[rlength];
for (int i = 0; i < rlength; i++) {
r[i] = chars[i + startIndex];
}
string s2(r);
return s2;
}
То, что я ожидаю увидеть:
"This is a test".substring(0, 4) -> "This"
"This is a test".substring(6, 8) -> "is"
"This is a test".substring(9, 10) -> "a"
То, что я на самом деле вижу:
"This is a test".substring(0, 4) -> "This"
"This is a test".substring(6, 8) -> "is"
"This is a test".substring(9, 10) -> "a�;�"
Из моегоПри поиске и устранении неисправностей создается впечатление, что r каким-то образом инициализируется до большего размера, чем ожидалось, оставляя после мусора ожидаемый текст.Кто-нибудь знает, почему это может произойти?