当前位置: 代码迷 >> 综合 >> VS使用scanf报错解决方法error C4996: ‘scanf‘: This function or variable may be unsafe.…
  详细解决方案

VS使用scanf报错解决方法error C4996: ‘scanf‘: This function or variable may be unsafe.…

热度:127   发布时间:2023-11-22 04:51:53.0

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认为该函数不安全所致。
可以通过多种方法解决该问题,根据自己的使用习惯进行设置即可。

  相关解决方案