난 내 자신의 문자열 클래스를 만들고있어 모든 것이 하나이를 제외하고 잘 작동 : 나는이 할 수 있도록 operator +=
연산자를 오버로드하기 위해 노력하고있어 :이 + = 연산자를 어떻게 작동시킬 수 있습니까?
string s1 = "Hello", s2 = " World";
s1 += s2;
것은 그래서 내가 뭘하려 :
// In the string class,
string& operator +=(string const& other)
{
using std::strcpy;
unsigned length = size() + other.size() + 1; // this->size() member
char *temp = new char[length]; // function and a "+ 1" for the
// null byte '\0'
strcpy(temp, buffer);
strcpy(temp, other.data());
delete[] buffer;
buffer = new char[length];
strcpy(buffer, temp); // copy temp into buffer
return *this;
}
그러나 my program 위의 주 코드를 사용할 때 출력 후에 출력이 없습니다. 또한 오류가 발생하지 않습니다 (런타임 오류조차도 없음). 왜 그런가요? 어떻게 구현할 수 있습니까?
참고 : std::string
을 사용할 수 있지만이 방법을 직접 배우고 싶습니다.
strcpy(temp, other.data());
당신은 이미 (이전 행에서) 버퍼에 첫 번째 문자열을 복사 한, 그러나 이것은 다음 은 다른 문자열의 데이터로을 덮어 :
사람들에게 코드에서 오류를 발견하도록 요청하는 것은 특히 생산성이 높지 않습니다. 디버거를 사용하거나 인쇄 문을 추가하여 프로그램의 진행 상황을 추적하고 발생 예상과 비교하여 문제를 격리해야합니다. 이 둘이 갈라지면 문제를 발견했습니다. (그리고 필요한 경우, [최소 테스트 케이스] (http://sscce.org)를 구성해야합니다. –
디버거를 사용 했습니까? 그렇다면 처음 두 개의'strcpy' 이후'temp'의 내용을 검사하십시오. –
@LuchianGrigore'temp'는 strcpy 다음에 그냥 "World"입니다. –