在使用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) //仅显示一个