error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead

描述

用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有可能带来的潜在错误。

通过以上两种办法都可以解决该错误。
希望对您有所帮助!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章