目录
前言
相信大家刚开始兴致勃勃的对C语言有些好感,发奋图强气质澎湃的想我一定要学好C语言,将来一定要编写一个属于自己的软件或游戏项目,刚开始学习printf很是顺利,但是一到scanf函数的时候,欸,报错了!!!与书本或者教程上看,明明代码敲的一模一样的,怎么会报错呢?!是不是环境搭建错误了或者是下错编译器了。
错误: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_s(scanf_s 只能在VS上使用),于是便设计了一个跟 scanf 功能相似的函数 scanf_s ,想用更全面的函数弥补 scanf 的缺陷,虽说微软本意是好的,但是像这种强制引导使用 scanf_s 的行为对新手是很不友好的,并且我们初学阶段很难接触到那些使用缺陷这样也显然会影响程序的可移植性,一般不建议这样修改。
解决办法
方法一使用scanf_s:
scanf直接替代为scanf_s
使用scanf报错:
改成scanf_s:
当然刚刚前言也提到了,用scanf_s是有缺陷的,在可移植性是比较差的,例如用gcc、clang编译是识别不了的,如果这段代码在Linux下运行就会提示语法错误的,所以我们能不用scanf_s就不用。
方法二修改SDL检测:
在菜单栏上找到 项目—属性,点进去后找到C/C++里有个SDL检查改成否就好啦,教程图如下:
属性修改好后,我们继续用scanf运行代码测试运行一下看看能不能成功,截图如下:
可以发现一点报错都没有滴,这是其中一种办法,但是用久了就会发现这种办法很麻烦,因为会发现新建一个项目就要重新设置一遍,再加上我们不可能只用一个文件项目去编写代码的,那还有什么办法捏,当然有的继续往下看吧。
方法三屏蔽C4996错误代码:
我们只要在代码顶端输入 #define _CRT_SECURE_NO_WARNINGS 1 就可以啦,当然我们不可能创建一个.c文件就手打一遍这个屏蔽代码吧,比方法二还要麻烦,那有没有我们一创建文件就自带这串代码的办法呢?当然有的,就一步一步跟着一下步骤修改文件就好了。
首先我们先找到并打开vs的文件所在位置
点击进入后我们按照一下路径点击 .\IDE\VC\VCProjectItems\ 找到 newc++file.cpp
然后我们右键用记事本打开输入 #define _CRT_SECURE_NO_WARNINGS 1 就好啦!
但是捏有时候会因为权限不够的原因导致修改保存失败,我们可以复制一份在电脑桌面上,在用记事本打开修改就可以啦,然后再拉回刚刚那个文件夹里,再代替就好了。
那我们再创建一个.c文件看看是否会自动加上 #define _CRT_SECURE_NO_WARNINGS 1 这串代码,在运行看看是否报错:
可以发现我都是再刚刚创建的test.c文件下进行操作的,也没有任何报错啦,终于能愉快的使用scanf函数了,编程真不容易 T_T 。
总结
本章中主要介绍了VS中出现的C4996的错误原因以及解决办法,如果你学会了解决C4996的办法,不妨在自己的电脑也试一下,成功了的话要是你的其他同学也遇到了一样的问题不妨帮帮他解决一下,如果有表达或编写不好的地方,希望大家能指出,我们大家一起进步喔!