현재 내 (자신의) 문자열 클래스를 구현하고 있지만 substr() 메서드에 문제가 있습니다.로컬 객체를 반환하면 가비지가 발생하고 동일한 객체를 반환하면 임시로 작동합니다.
MyString MyString::substr(size_t position, size_t length)
{
if (checkBounds() || length == 0)
{
return MyString();
}
char* tmp = new char[length + 1];
memcpy(tmp, this->s + position, length);
tmp[length] = STRING_ESCAPE;
MyString result(tmp);
delete[] tmp;
tmp = nullptr;
return result;
}
이 메서드를 호출하고 반환 값을 인쇄 할 때 (객체 자체가 아닌 문자 배열 액티비티를 인쇄하고 있습니다), 일련의 사각형으로 수행되는 완전한 쓰레기를받습니다.
그러나 임시 객체 return MyString(tmp)
을 반환하면 모든 것이 잘 동작합니다. 처음에는이 문제가 delete [] 연산과 관련되어있는 것으로 의심 되나 주석으로 처리하면 아무런 효과가 없습니다.
MyString::MyString(const char* s)
{
size_t length = this->strlen(s);
this->sLength = length;
this->s = new char[length + 1];
for (size_t i = 0; i <= length; ++i)
{
this->s[i] = *s;
++s;
}
}
그래서 내 실수는 다음과 같습니다
호출되는 MyString의 생성자는 다음과 같습니다? 고맙습니다!
'STRING_ESCAPE'는 0을위한 멋진 이름입니까? – Casey
왜 'memcpy'를 사용하고 있습니까? 'strcpy'를 사용하십시오. –
#define STRING_ESCAPE '\ 0' – BL9009