请问大家,为什么我感觉我的程序逻辑没错误,为什么结果不对呢
程序代码:
class hstring { private: unsigned short usmlen{}; //新建的内存长度 char* cstr; //字符串 unsigned short uslen; //字符串长度 } hstring::hstring() { cstr = NULL; //指针初始化 usmlen = 0x32; //给予usmlen一个初始值,不然进入copystr函数后,无法与len进行比较 uslen=0; } void hstring::copystr(char*& dest, const char* source)//这个copystr应该是没问题的,所以这整个函数没必要 //看 { unsigned short len = getlength(source); if (len > usmlen) { dest = new char[len]; //重新分配内存 uslen = len; } else { uslen = len; dest = new char[usmlen]; } memcpy(dest, source, len); dest[len] = 0; } hstring::hstring(const char* _str) :hstring() { copystr(cstr, _str); } unsigned short hstring::getlength(const char* str) { unsigned short len{};//len局部变量 for (; str[len]; len++); //len包括了末尾0的长度 return len; //for循环计算出len的长度,返回它的值,即字符串str的长度 } hstring& hstring::operator<<(const hstring& hstr) { unsigned short hstrlen = getlength(hstr.cstr);//hstrlen表示传入的对象的字符串长度 char* tempmem = cstr; //先将cstr保存一份 if (hstrlen + uslen > usmlen) //uslen表示本对象的字符串长度 { //如果内存不够就扩充内存 cstr = new char[hstrlen + uslen]; //cstr表示本字符串 memcpy(cstr, tempmem, uslen); } else { cstr = new char[0x32]; memcpy(cstr, tempmem, uslen); } memcpy(cstr+uslen, hstr.cstr, hstrlen+1);//将传入的对象的字符串保存到本对象的字符串后面 uslen = uslen + hstrlen - 1;//更新本对象的字符串长度 return *this; } hstring& hstring::operator+(int val) { char str[12]{}; //定义一个字符串数组 int length = 11; do { str[length--] = val % 10 + 48; //把val每个位数的数字依次放入str } while (val /= 10); return *this << &str[length] ; //调用<<的重载 }
为什么我写
hstring hstr1="00000";
hstr1=hstr1+100000; //调用operator+
std::cout<<hst1;
结果出不来呢,结果还是0000