#2
apull2023-04-18 01:38
大概修改了下,供参考。
程序代码: #include <iostream> class hstring { private: unsigned short usmlen = 0x32; // 新建的内存长度 char *cstr = NULL; // 字符串 unsigned short uslen = 0; // 字符串长度 unsigned short getlength(const char *str); // 得到对象的字符串长度 // void copystr(char *dest, const char *source); // 复制内存函数 void copystr(const char *source); //-- dest是内部字符串,不用传递 public: hstring(const hstring &str); hstring(const char *_str); hstring &operator=(const hstring &str); char *getstr() { return cstr; } hstring(); }; hstring::hstring() //-- 在无参构造时调用,后面2个hstring声明没有使用这个构造,导致cstr空指针,memcpy时出错 { //-- usmlen = 0x32; //-- uslen = 0; cstr = new char[usmlen]; } unsigned short hstring::getlength(const char *str) { unsigned short len{}; for (; str[len]; len++) ; //-- 此处缺少分号,不然返回值都是0 return len; } void hstring::copystr(const char *source) { unsigned short len = getlength(source); if (len > usmlen || cstr == NULL) //-- { // 先释放内存,再重新分配内存 if (cstr) delete cstr; cstr = new char[len + 1]; // 重新分配内存,+1给末尾的'\0'留位置 usmlen = len; } memcpy(cstr, source, len); // memcpy(dest, source, len); uslen = len; //-- 更改字符串长度 } hstring::hstring(const char *_str) { copystr(_str); //-- copystr(cstr, _str); } hstring::hstring(const hstring &str) { copystr(str.cstr); //-- copystr(cstr, str.cstr); } hstring &hstring::operator=(const hstring &str) { copystr(str.cstr); //-- copystr(cstr, str.cstr); return *this; } int main() { char str[]{"1234567890aaaaa"}; hstring hstr(str); hstring hstr1 = hstr; //-- 调用拷贝构造 /* hstring hstr1; hstr1 = hstr; //-- hstr1已经声明的情况下调用=重载 */ std::cout << hstr.getstr() << std::endl; std::cout << hstr1.getstr(); system("pause"); } [此贴子已经被作者于2023-4-18 01:48编辑过] |
程序代码:
#include <iostream>
class hstring
{
private:
unsigned short usmlen; //新建的内存长度
char* cstr; //字符串
unsigned short uslen; //字符串长度
unsigned short getlength(const char* str) ; //得到对象的字符串长度
void copystr(char* dest, const char* source); //复制内存函数
public:
hstring(const hstring& str);
hstring(const char* _str);
hstring& operator= (const hstring& str);
char* getstr()
{
return cstr;
}
hstring();
};
hstring::hstring()
{
usmlen = 0x32;
uslen = 0;
cstr = new char[usmlen];
}
unsigned short hstring::getlength(const char* str)
{
unsigned short len{};
for (; str[len];len++)
return len;
}
void hstring::copystr(char* dest, const char* source)
{
unsigned short len = getlength(source);
if (len > usmlen)
{
cstr = new char[len]; //重新分配内存
usmlen = len;
}
memcpy(dest, source, len);
}
hstring::hstring(const char* _str)
{
copystr(cstr,_str);
}
hstring::hstring(const hstring& str)
{
copystr(cstr, str.cstr);
}
hstring& hstring::operator=(const hstring& str)
{
copystr(cstr, str.cstr);
return *this;
}
int main()
{
char str[]{ "1234567890aaaaa" };
hstring hstr(str);
hstring hstr1=hstr;
std::cout << hstr.getstr()<<std::endl;
std::cout <<hstr1.getstr();
system("pause");
}
class hstring
{
private:
unsigned short usmlen; //新建的内存长度
char* cstr; //字符串
unsigned short uslen; //字符串长度
unsigned short getlength(const char* str) ; //得到对象的字符串长度
void copystr(char* dest, const char* source); //复制内存函数
public:
hstring(const hstring& str);
hstring(const char* _str);
hstring& operator= (const hstring& str);
char* getstr()
{
return cstr;
}
hstring();
};
hstring::hstring()
{
usmlen = 0x32;
uslen = 0;
cstr = new char[usmlen];
}
unsigned short hstring::getlength(const char* str)
{
unsigned short len{};
for (; str[len];len++)
return len;
}
void hstring::copystr(char* dest, const char* source)
{
unsigned short len = getlength(source);
if (len > usmlen)
{
cstr = new char[len]; //重新分配内存
usmlen = len;
}
memcpy(dest, source, len);
}
hstring::hstring(const char* _str)
{
copystr(cstr,_str);
}
hstring::hstring(const hstring& str)
{
copystr(cstr, str.cstr);
}
hstring& hstring::operator=(const hstring& str)
{
copystr(cstr, str.cstr);
return *this;
}
int main()
{
char str[]{ "1234567890aaaaa" };
hstring hstr(str);
hstring hstr1=hstr;
std::cout << hstr.getstr()<<std::endl;
std::cout <<hstr1.getstr();
system("pause");
}
为什么我这里的代码跑起来就崩溃了呢?是哪里错了呢?清各位高手解答