VS使用scanf报错解决方法【error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.】
- 安全检查错误
-
- 出现错误的原因
- 类似的错误情况
- 解决方法
-
- 1.系统建议方法
- 2.【推荐】定义预定义符号方法
- 3.设置项目属性预处理方法
- 4.取消勾选安全开发生命周期(SDL)检查
- 总结
安全检查错误
新安装VS2013的用户使用时,常常会遇到这样的问题:
如上图,仅仅一个最简单的程序便出现这种错误。
错误说明为:error C4996: ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
出现错误的原因
我们输入的函数是不安全的。例如在通常使用“scanf”时,我们并没有对将要放入的数据所占用的空间进行检测(可能出现数据越界),因此这样是不够安全的。
类似的错误情况
其实除了”scanf“以为,“strcpy”、“strcat”、“sscanf”、“fopen”…等函数都会出现安全检查错误。
解决方法
1.系统建议方法
在VS中使用”scanf“等类似函数时,在函数末尾添加”_s“,即”scanf_s“,译为安全版本的函数。但如果将这段代码放入其他编译器中使用时(如GCC编译器)将可能无法识别,即代码不具有跨平台性/可移植性。
2.【推荐】定义预定义符号方法
在源文件(.c)的头文件的最前面写下(如图):
【#define _CRT_SECURE_NO_WARNINGS】
解决问题。
基于此,可使用如下方法完全解决该问题(以后新建的源文件中都自动产生这句代码)
在VS安装路径下搜索:newc++file.cpp文件,打开后在文件首行添加该代码:【#define _CRT_SECURE_NO_WARNINGS】
注:该文件一般在:Microsoft Visual Studio 12.0\VC\vcprojectitems路径下,但是不同的版本所在路径可能不同,需要自己辨识。
3.设置项目属性预处理方法
使用解决方案资源管理器,右击打开项目属性
【配置属性】–>【C/C++】–>【预处理器】–>【预处理定义】右侧添加”;“(注意为英文模式下的分号)和该代码【_CRT_SECURE_NO_WARNINGS】
完成设置。该方法的缺点是需要每次创建新项目都进行设置。
4.取消勾选安全开发生命周期(SDL)检查
在新建项目时,选择Win32控制台应用程序创建项目
点击下一步
取消勾选安全开发生命周期(SDL)检查选项,勾选【空项目】,即可完成。
总结
VS使用”scanf“、“strcpy”、“strcat”、“sscanf”、“fopen”…等函数时都会出现安全检查错误,这是由于VS认为该函数不安全所致。
可以通过多种方法解决该问题,根据自己的使用习惯进行设置即可。