描述
用vs2013新建一个windows窗口项目,编写代码运行出现一下错误
错误 2 error 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.
解决办法
1、根据错误提醒,将strcpy修改为strcpy_s即可。
说明:
strcpy()
原型:char *strcpy(char *dst,const char *src)
功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括’\0’结束符,返回dst地址。要求:src和dst所指内存区域不可以重叠且dst必须有足够的空间来容纳src的字符串,若dst空间不足,编译时并不会报错,但执行时因系统不同会出现不同的结果:Mac系统提示“Abort trap:6”(Mac);CentOS7系统会正常运行(可能是个例,可以正常运行)
strcpy_s()
该函数是VS2005之后的VS提供的,并非C标准函数
原型:strcpy_s( char *dst, size_t num, const char *src )
功能:同strcpy()函数功能相同,不同之处在于参数中多了个size_t类型的参数,该参数为字符串dst的长度,当存在缓存区溢出的问题时(即src的长度大于dst的长度),strcpy_s()会抛出异常;而strcpy()结果则未定,因为它错误地改变了程序中其他部分的内存的数据,可能不会抛出异常但导致程序数据错误,也可能由于非法内存访问抛出异常。
总结:strcpy在运行的过程中如果dst空间不足,在操作数据的时候,会修改dst空间外的数据,造成程序运行期间难以预料的错误。strcpy_s则不会出现此问题,但strcpy_s非标准库函数。
2、右键项目属性打开项目配置页;找到c/c++预处理器项,在预处理器定义加入 _CRT_SECURE_NO_WARNINGS保存即可。
说明:这种处理办法,就是表明接收strcpy有可能带来的潜在错误。
通过以上两种办法都可以解决该错误。
希望对您有所帮助!