前言:当我们是初学者的时候,用过很多软件像什么VC6.0、DEV C++、VS各种版本。但是你会发现当我们在使用VS这款软件的时候,scanf会发生报错而导致自己写的程序无法运行。但是换成了scanf_s就可以正常运行啦。但是作为新手的我们虽然只需要加上或者删除_s就可以实现在多个编程软件中切换,但是如果scanf太多就会或多或少的有点麻烦。总的来说就是夸平台性不是很好。所以今天这个教程就是帮助大家解决scanf报错的问题。
当我们在VS中使用scanf的时候会发现这样的报错
我们可以看到C4996提示scanf不安全,建议使用scanf_s代。如果你要不想再出现报错请使用 _CRT_SECURE_NO_WARNINGS
解决方法:
方法一:在你的源文件里最上边加上#define _CRT_SECURE_NO_WARNINGS 1一句话。再次运行的时候就不出错啦(如下图)。可是这样很麻烦,每一次都要加。所以就有了方法二。
方法二:如果你不想每次在写程序的时候都写一边#define _CRT_SECURE_NO_WARNINGS 1那么请往下接着看。
1.找到我们安装VS的目录,这里我用2022版的进行演示(所有版本通用)
D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCProjectItems里的(因为不同版本路径可能不同,所以最方便的就是去安装路径之后搜索newc++file.cpp这个文件)
找到这个文件之后右击-打开方式-记事本在里边输入#define _CRT_SECURE_NO_WARNINGS 1
保存即可。到这里如果你可以正常保存那就不用往下看了。你每次创建一个新的源文件的时候你就会发现它自己就给你的最上方加入了#define _CRT_SECURE_NO_WARNINGS 1
2.如果提示不能保存的时候请继续往下看
点击这个最下方开始按键,搜索记事本
点击文件打开
输入所在路径,文件类型改为所有路径就可以看到文件了。
打开之后输入#define _CRT_SECURE_NO_WARNINGS 1保存即可
等到下次再新建源文件的时候,就会自动在第一行写上
#define _CRT_SECURE_NO_WARNINGS 1
补充:scanf和scanf_s有什么区别吗?当然有,VS里告诉你scanf不安全的确是不安全,因为scanf造成数据溢出之后会被黑客给利用从而造成不必要的麻烦
scanf不会检查输入边界,可能造成数据溢出
scanf_s会检查输入边界就不会造成数据溢出
在C语言中scanf_s不是C语言标准规定的,这个scanf_s只是VS编译提供的,所以做为初学者的我们还是建议使用scanf,因为他放到哪个软件上都能运行不会报错。如果你要使用scanf_s的话要弄懂他的使用方法,他和scanf的用法还是有点区别的。避免以后写代码的时候出现多多少少的bug。
总结:
1.scanf不安全,scanf_s会检查边界安全一些,但是scanf_s只是VS编译提供的,不是C语言标准规定的放到其他软件就没办法识别了。
2.在源文件的最上边一行加入#define _CRT_SECURE_NO_WARNINGS 1后就可以使用scanf啦
最后感谢各位大佬看到这里,如果你喜欢这篇文章的话,求赞求收藏求评论指点,谢谢谢谢谢谢!