在VS中,对于初学者来说存在一些各种意想不到的错误,但比较友好的是新版本中在报错的同时会指出错误地方。以下说说VS2019中 c4996 sacnf报错的解决方法。
操作环境:win10+VS2019
错误代码:C4996
实例说明
进行报错
错误分析
严重性 | 代码 | 说明 |
错误 | 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. |
VS认为直接使用C语言定义的函数scanf不安全,而在VS编译器所提供的包括 scanf_s、wscanf_s等以_s结尾版本的函数具有安全增强功能。scanf等函数存在于版本较旧的CRT(C runtime library, part of the C standard library)中,具有安全性问题,比如在读取字符时,若不指定%s的宽度,可能会导致缓冲区溢出。
解决方案
1.使用VS中所推荐使用的方法 将scanf改为scanf_s
显示运行成功
存在问题:虽然说这种方式可以解决问题,但是实际上scanf是c语言提供的函数,可以使用大多数的编译器,而scanf_s这个函数只是VS编译器提供的一个它自身认为安全的一个版本,在其他编译器下不一定适用,不能跨版本使用。
显示运行成功
存在问题:每次新建一个项目都需多加一行代码,增加工作量。
不过也可以通过设置一个文件,里面包含这一串代码,在新建时就不用输入
1.打开visual studiod的安装位置。我用的是visual studio 2019。目录在:E:\Microsoft Visual Studio\2019\Preview\Common7\IDE\VC\VCProjectItems
2.VCProjectItems下的newc++file.cpp文件用NotPad++或者editplus方式打开,添加上 #define _CRT_SECURE_NO_WARNINGS 1,然后保存,下一次创建的时候就不需要在手动加入。
3.同第二个方法,加上一串屏蔽代码#define _CRT_SECURE_NO_WARNINGS 1
希望对你有所帮助~