一、问题描述
在VS2017下使用 strcpy() 函数时会出先报错,根据所给报错提示“Consider using strcpy_s instead.”
二、解决方法
使用strcpy_s函数替代。先看看strcpy_s的定义:
_Check_return_wat_
_ACRTIMP errno_t __cdecl strcpy_s(
_Out_writes_z_(_SizeInBytes) char* _Destination,
_In_ rsize_t _SizeInBytes,
_In_z_ char const* _Source
);
可以通过右键点击strcpy_s函数,然后选到转到说定义进行定义查看。
通过定义可知strcpy_s()函数包含3个参数
- 目标字符串指针
- 字符串长度
- 输入字符串指针
一般在获取字符串长度的过程中我们常用strlen()函数计算字符,不过要切记:在使用strlen()求出字符串长度时一定要+1
原因:strlen()函数用来计算字符串的长度,其原型为: unsigned int strlen (char *s);
【参数说明】s为指定的字符串。 strlen()用来计算指定的字符串s 的长度,不包括结束字符"\0"。
三、练习代码
Test()//无参数,析构函数
{//完成对属性的初始化工作
a = 10;
p = (char *)malloc(100);
strcpy_s(p, strlen("aaaabbbb") + 1, "aaaabbbb");//注意是strlen(temp)+1
cout << "我是析构函数,被执行了" << endl;
}