雪傲天1 2023-04-10 21:29 采纳率: 96.2%
浏览 42
已结题

这段代码哪里出错了呢,我觉得没错误啊



```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");
}
```、
这段代码哪里出错了呢
  • 写回答

4条回答 默认 最新

  • CQ.abc 2023-04-10 21:46
    关注

    以下回答结合了ChatGPT:

    1. 在 hstring(const char* _str) 构造函数中,为 c_str 分配内存时,应该使用 new char[len] 而不是 new char(len),前者可以分配 len 个 char 的空间,而后者只能分配一个 char 的空间,导致后面的内存操作越界。
    2. 在使用 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");
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 4月19日
  • 已采纳回答 4月11日
  • 创建了问题 4月10日

悬赏问题

  • ¥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的方法去调试网页