char *strcpy(char *strDest, const char *strSrc) class String { public: String(const char *str = NULL); //通用構造函數 String(const String &another); //拷貝構造函數 ~String(); //析構函數 String &operator=(const String &rhs); //賦值操作符 private: char *m_data; }; char *strcpy(char *strDest, const char *strSrc) { if(strDest==NULL || strSrc==NULL) { return NULL; } if(strDest==strSrc) { return strDest; } char* strResult = strDest; while((*strDest++ = *strSrc++)!='\0') ; return strResult; } String::String(const char *str) { if(str == NULL) { m_data = new char(1); m_data[0]='\0'; } else { m_data = new char(strlen(str)+1); strcpy(m_data,str); } } String::String(const String &another) { m_data = new char(strlen(another.m_data)+1); strcpy(m_data,another.m_data); } String& String::operator=(const String &rhs) { if(&rhs==this) { return *this; } delete[] m_data; m_data = new char(strlen(rhs.m_data)+1); strcpy(m_data,rhs.m_data); return *this; } String::~String() { delete[] m_data; } String& String::operator=(const String &rhs) { if(this==&rhs) { return *this; } delete[] m_data; m_data = new char[strlen(rhs.m_data)+1]; strcpy(m_data,rhs.m_data); return *this; }