_data
은 초기화하지 않은 것이 문제입니다. strcat()
의 첫 번째 인수는 null로 끝나는 문자열이어야하지만 초기화되지 않은 배열을 제공합니다.
MyString operator+(MyString lhs, MyString rhs)
{
MyString m3(lhs._size + rhs._size + 1);
strcpy(m3._data, lhs._data);
strcat(m3._data, rhs._data);
return m3;
}
또는 당신은 _data
를 초기화 할 수 있습니다 :
가 첫 번째 문자열을 복사하려면하지
strcat()
,
strcpy()
사용
MyString operator+(MyString lhs, MyString rhs)
{
MyString m3(lhs._size + rhs._size + 1);
m3._data[0] = '\0';
strcat(m3._data, lhs._data);
strcat(m3._data, rhs._data);
return m3;
}
아니면 크기를 가지고 있기 때문에 당신이 주소 연산 및 memcpy
을 사용할 수 있습니다 .
MyString operator+(MyString lhs, MyString rhs)
{
MyString m3(lhs._size + rhs._size + 1);
m3._data[m3._size] = '\0';
memcpy(m3._data, lhs._data, lhs._size);
memcpy(m3._data+lhs._size, rhs._data, rhs._size);
return m3;
}
음, 모든 플랫폼에서 당신은 strcat와를 사용할 수 있으며, Windows에서 당신이 원하는 경우 strcat_s를 사용하거나 그냥 경고를 strcat와를 사용하여 경고를 무시하거나 사용하지 않도록 설정할 수 있습니다. 그래도 코드에는 다른 버그가 있습니다. – immibis
그럼 strcat을 사용하면 그 목적을 이길 수 있습니까? –
어떻게 컴파일하지 않습니까? 어떤 오류 메시지가 나타 납니까? –