weixin_52309298 2021-05-23 19:29 采纳率: 100%
浏览 339
已采纳

类中strcpy和strcpy_s的使用报错

严重性    代码    说明    项目    文件    行    禁止显示状态
错误    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.    Clientl  类实验    C:\Users\20892\source\repos\Clientl  类实验\源.cpp    9    

将strcpy改成strcpy_后还是不行

#include<iostream>
using namespace std;
class Client
{
public:
	Client()
	{
		m_name = new char[20];
		strcpy_s(m_name, "noname");
		m_age = 0;
		m_type = 0;
	};  //无参初始化
	Client(const char *pname, int age, int type)
	{
		m_name = new char[strlen(pname) + 1];
		strcpy_s(m_name, pname);
		m_age = age;
		m_type = type;
	}  //有参初始化
	~Client()
	{
		delete[] m_name;
	}
	void SetName(const char* pname)
	{
		delete[]m_name;
		m_name = new char[strlen(pname) + 1];
		strcpy_s(m_name, pname);
	}  //设置姓名
	char *GetName()
	{
		return m_name;
	}
	void SetType(int type)
	{
		m_type = type;
	}
	int GetType()
	{
		return m_type;
	}
	void SeTage(int age)
	{
		m_age = age;
	}
	int GetAge()
	{
		return m_age;
	}
	Client(Client& obj)
	{
		m_type = obj.GetType();
		m_age = obj.GetAge();
		m_name = new char[strlen(obj.GetName())+1];
		strcpy_s(m_name, obj.GetName());
	}
private:
	char *m_name;
	int m_age;
	int m_type;
};
void display(Client x)
{
	cout << "名字为:" << x.GetName() << " 类型为:" <<
		x.GetType() << " 年龄为:" << x.GetAge() << endl;
}
int main()
{
	Client c1, c2("panjiang", 19, 3);
	c1.SetName("liming");
	c1.SeTage(20);
	c1.SetType(2);
	display(c1);
	display(c2);
	return 0;
}
  • 写回答

2条回答 默认 最新

  • qzjhjxj 2021-05-23 19:51
    关注

    供参考:

    1、函数strcpy()函数和安全版本strcpy_s()函数都是存在于头文件<cstring>中的,所以#include <cstring>不能少。
    2、其次,原函数strcpy()函数是存在于标准名称空间std中的成员,所以要使用strcpy()函数,还需要加上以下语句:
    using namespace std;。
    3、单单是避免错误代码4996的情况,可以使用编辑器的选择性提供warning功能,在include语句前面加上这句:
    #pragma warning( disable : 4996)
    4、但是这种解决方法有时候不能解决问题,那就索性关闭warning功能就好了,完成这个任务的方法是在
    #include<stdio.h>的前面加上一句:
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格