```c++
#include<iostream>
#include<string>
using std::string;
class hstring
{
private:
char* c_str;
unsigned short len;
unsigned short length(const char* str)
{
unsigned short len{};
while (str[len++]);
return len;
}
public:
hstring( )
{
len = 1;
c_str = new char[1]{0};
}
hstring(const hstring& str) :hstring(str.show())
{
}
hstring(const char* _str)
{
len = length(_str);
c_str=new char(len);
memcpy(c_str, _str, len);
}
char* show() const
{
return c_str;
}
~hstring()
{
delete[] c_str;
}
};
int main()
{
hstring str("1");
hstring strA(str);
std::cout << str.show();
system("pause");
}
```、
这段代码哪里出错了呢
这段代码哪里出错了呢,我觉得没错误啊
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- CQ.abc 2023-04-10 21:46关注
以下回答结合了ChatGPT:
- 在 hstring(const char* _str) 构造函数中,为 c_str 分配内存时,应该使用 new char[len] 而不是 new char(len),前者可以分配 len 个 char 的空间,而后者只能分配一个 char 的空间,导致后面的内存操作越界。
- 在使用 hstring(str.show()) 构造 hstring 对象时,由于 show() 返回的是 const char* 类型,所以需要在构造函数前加上 const 修饰符,即 hstring(const char* const _str)。
下面是修改后的代码:
#include<iostream> #include<string> #include<cstring> using std::string; class hstring { private: char* c_str; unsigned short len; unsigned short length(const char* str) { unsigned short len{}; while (str[len++]); return len; } public: hstring() { len = 1; c_str = new char[1]{ 0 }; } hstring(const hstring& str) :hstring(str.show()) { } hstring(const char* const _str) { len = length(_str); c_str = new char[len]; memcpy(c_str, _str, len); } char* show() const { return c_str; } ~hstring() { delete[] c_str; } }; int main() { hstring str("1"); hstring strA(str); std::cout << str.show(); system("pause"); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥30 求给定范围的全体素数p的(p-2)的连乘积
- ¥15 VFP如何使用阿里TTS实现文字转语音?
- ¥100 需要跳转番茄畅听app的adb命令
- ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
- ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
- ¥50 opencv4nodejs 如何安装
- ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
- ¥15 nginx反向代理获取ip,java获取真实ip
- ¥15 eda:门禁系统设计
- ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页