严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. cc19a_demo d:\users\tt2018\documents\visual studio 2015\projects\cc19a_demo\cc19a_demo\cc19a_demo.cpp 29
解决方法:代码顶部添加 #define _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>//赋值操作符练习
using namespace std;
class String
{
public:
String(char const *ptrChars="");
String &operator=(String const&);
String &operator=(char const *);//s="cat";这种方式
String &operator=(char); //s='a';//单个字符
void print();
private:
char *ptrChars;
};
void String::print()
{
cout << ptrChars << endl;
}
String::String(char const *chars)
{
chars = chars ? chars : "";//判断是否(空)null,发now的音
ptrChars = new char[std::strlen(chars)+1];
std::strcpy(ptrChars,chars);
}
String &String::operator=(String const &str)
{
if (strlen(ptrChars) != strlen(str.ptrChars)) //需要判断存储的空间长度是否一致,如果不一致。得动态分配一个新的存储空间,获取到需要保存的指针长度。
{ //s的是hello,5个长度,s2是dog,3个长度。5与3长度不一致,新分配的ptrHold先获取到s2的长度,然后返回给ptrChars,ptrChars就是3的长度了。这样ptrChars才能保存新传入的str.ptrChars的值。
char *ptrHold = new char[strlen(str.ptrChars)+1];
delete[] ptrChars;
ptrChars = ptrHold;//获取到后,又把ptrHold赋值给ptrChars,确保不会出错。
}
std::strcpy(ptrChars,str.ptrChars);
return *this;//赋值操作必须返回对*this的引用
}
int main()
{
String s("hello");
String s2("dog");
s.print();
s2.print();
s = s2;
s.print();
//cout << "hello1" << endl;
//getchar();
system("pause");
return 0;
}