关闭 C4996 警告(_CRT_SECURE_NO_DEPRECATE)方法

在使用VS2012写代码的时候,在使用到fopen、strncpy等库函数时,编译器会提示

warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

或者

error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

至于是warning、erro并不是问题并不是重点,问题关键是提示中说 " 函数或者变量不安全,建议使用fopen_s代替 ",后边有说了“To disable deprecation, use _CRT_SECURE_NO_WARNINGS”就是说通过使用_CRT_SECURE_NO_WARNINGS可以弃用禁用上述警告。


那么为什么会出现这种情况呢?


其实C4996不是错误,只是一个警告,在vs2012把这个视为错误了而已。出现这样的警告或者错误是因为VC2012中认为CRT中的一组函函数如:strcpy、strcat等使用不当,因为更高级的安全版本的函数在其后面加了一个_s。高版本的函数标准使用起来更有效,也便于识别,如:strcpy_s,calloc_s等。主要不安全的地方在于起潜在的缓冲区边界问题,这种不安全性表现在用户编程时的访问越界。

如果不愿改变函数名,执意使用原函数名,那么在“项目—>属性—>预处理器 —>预处理器定义“中添加_CRT_SECURE_NO_DEPRECATE即可。


另一种避免这种警告的方法时:

#pragma warning(disable:4996) //全部禁用

#pragma warning(noce:4996) //仅显示一个

猜你喜欢

转载自blog.csdn.net/ljb825802164/article/details/51859418