问问什么叫"不符合strcpy的规范" 这里应该怎么改

问问什么叫

问题描述:

#define  _CRT_SECURE_NO_WARNINGS 
#include <iostream>
using namespace std;

//

class  Name
{
public:
    Name(const char* myp)
    {
        if (myp == 0)
            myp = "a";
        m_len = strlen(myp);
        m_p = (char*)malloc(m_len + 1); //
        strcpy(m_p, myp);
    }

    //Name obj2 = obj1;
    //解决方案: 手工的编写拷贝构造函数 使用深copy
    Name(const Name& obj1)
    {
        m_len = obj1.m_len;
        m_p = (char*)malloc(m_len + 1);
        strcpy(m_p, obj1.m_p);
    }

    ~Name()
    {
        if (m_p != NULL)
        {
            free(m_p);
            m_p = NULL;
            m_len = 0;
        }
    }
protected:
private:
    char* m_p;
    int m_len;
};

//对象析构的时候 出现coredump
void objplaymain()
{
    Name obj1("abcdefg");
    //Name obj2 = obj1;  //C++编译器提供的 默认的copy构造函数  浅拷贝
    Name obj3("obj3");

    obj3 = obj1;  // C++编译器提供的 等号操作 也属 浅拷贝
}

void main91()
{
    objplaymain();
    cout << "hello..." << endl;
    system("pause");
    return;
}

 

这个程序的主要原因不是这个,你的问题压根对程序不造成影响。主要原因在于你没有对赋值运算符进行重载,你不仅仅重写拷贝构造,而且还要重载赋值运算符

建议用 strcpy_s.  参见: strcpy, wcscpy, _mbscpy | Microsoft Docs