#include <iostream>
#include <string.h>
using namespace std;
class String
{
char *m_str;
size_t m_len, m_alloced;
public:
String(const char *str = "")
{
m_len = strlen(str);
m_alloced = m_len + 1;
m_str = (char *)malloc(m_alloced);
strcpy(m_str, str);
}
String(const String &other)
{
m_len = other.m_len;
m_alloced = m_len + 1;
m_str = (char *)malloc(m_alloced);
strcpy(m_str, other.m_str);
}
String &operator =(const String &rhs)
{
if (m_alloced < rhs.m_len + 1)
{
m_alloced = rhs.m_len + 1;
m_str = (char *)realloc(m_str, m_alloced);
}
m_len = rhs.m_len;
strcpy(m_str, rhs.m_str);
return *this;
}
const char *get() const
{
return m_str;
}
};
int main()
{
String str1 = "asdf";
String str2 = str1;
String str3 = "12";
str3 = str1;
cout << str1.get() << endl << str2.get() << endl << str3.get() << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICAgY2xhc3MgU3RyaW5nCiAgICB7CiAgICAgICAgY2hhciAqbV9zdHI7CiAgICAgICAgc2l6ZV90IG1fbGVuLCBtX2FsbG9jZWQ7CiAgICBwdWJsaWM6CiAgICAgICAgU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciA9ICIiKQogICAgICAgIHsKICAgICAgICAgICAgbV9sZW4gPSBzdHJsZW4oc3RyKTsKICAgICAgICAgICAgbV9hbGxvY2VkID0gbV9sZW4gKyAxOwogICAgICAgICAgICBtX3N0ciA9IChjaGFyICopbWFsbG9jKG1fYWxsb2NlZCk7CiAgICAgICAgICAgIHN0cmNweShtX3N0ciwgc3RyKTsKICAgICAgICB9CiAgICAgICAgU3RyaW5nKGNvbnN0IFN0cmluZyAmb3RoZXIpCiAgICAgICAgewogICAgICAgICAgICBtX2xlbiA9IG90aGVyLm1fbGVuOwogICAgICAgICAgICBtX2FsbG9jZWQgPSBtX2xlbiArIDE7CiAgICAgICAgICAgIG1fc3RyID0gKGNoYXIgKiltYWxsb2MobV9hbGxvY2VkKTsKICAgICAgICAgICAgc3RyY3B5KG1fc3RyLCBvdGhlci5tX3N0cik7CiAgICAgICAgfQogICAgICAgIFN0cmluZyAmb3BlcmF0b3IgPShjb25zdCBTdHJpbmcgJnJocykKICAgICAgICB7CiAgICAgICAgICAgIGlmIChtX2FsbG9jZWQgPCByaHMubV9sZW4gKyAxKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBtX2FsbG9jZWQgPSByaHMubV9sZW4gKyAxOwogICAgICAgICAgICAgICAgbV9zdHIgPSAoY2hhciAqKXJlYWxsb2MobV9zdHIsIG1fYWxsb2NlZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG1fbGVuID0gcmhzLm1fbGVuOwogICAgICAgICAgICBzdHJjcHkobV9zdHIsIHJocy5tX3N0cik7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICB9CiAgICAgICAgY29uc3QgY2hhciAqZ2V0KCkgY29uc3QKICAgICAgICB7CiAgICAgICAgCXJldHVybiBtX3N0cjsKICAgICAgICB9CiAgICB9OwoKaW50IG1haW4oKQp7CglTdHJpbmcgc3RyMSA9ICJhc2RmIjsKCVN0cmluZyBzdHIyID0gc3RyMTsKCVN0cmluZyBzdHIzID0gIjEyIjsKCXN0cjMgPSBzdHIxOwoKCWNvdXQgPDwgc3RyMS5nZXQoKSA8PCBlbmRsIDw8IHN0cjIuZ2V0KCkgPDwgZW5kbCA8PCBzdHIzLmdldCgpIDw8IGVuZGw7Cn0KCg==