前言:当我们是初学者的时候,用过很多软件像什么VC6.0、DEV C++、VS各种版本。但是你会发现当我们在使用VS这款软件的时候,scanf会发生报错而导致自己写的程序无法运行。但是换成了scanf_s就可以正常运行啦。但是作为新手的我们虽然只需要加上或者删除_s就可以实现在多个编程软件中切换,但是如果scanf太多就会或多或少的有点麻烦。总的来说就是夸平台性不是很好。所以今天这个教程就是帮助大家解决scanf报错的问题。

当我们在VS中使用scanf的时候会发现这样的报错

VS使用java VS使用scanf_源文件

如果你要不想再出现报错请使用 _CRT_SECURE_NO_WARNINGS

解决方法:

方法一:在你的源文件里最上边加上#define _CRT_SECURE_NO_WARNINGS 1一句话。再次运行的时候就不出错啦(如下图)。可是这样很麻烦,每一次都要加。所以就有了方法二。

VS使用java VS使用scanf_VS使用java_02

方法二:如果你不想每次在写程序的时候都写一边#define _CRT_SECURE_NO_WARNINGS 1那么请往下接着看。

1.找到我们安装VS的目录,这里我用2022版的进行演示(所有版本通用)

D:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\VC\VCProjectItems里的(因为不同版本路径可能不同,所以最方便的就是去安装路径之后搜索newc++file.cpp这个文件)

VS使用java VS使用scanf_visual studio_03

#define _CRT_SECURE_NO_WARNINGS 1

#define _CRT_SECURE_NO_WARNINGS 1

2.如果提示不能保存的时候请继续往下看

点击这个最下方开始按键,搜索记事本

VS使用java VS使用scanf_#define_04

VS使用java VS使用scanf_VS使用java_05

 点击文件打开

VS使用java VS使用scanf_源文件_06

输入所在路径,文件类型改为所有路径就可以看到文件了。

VS使用java VS使用scanf_源文件_07

#define _CRT_SECURE_NO_WARNINGS 1保存即可

VS使用java VS使用scanf_源文件_08

 等到下次再新建源文件的时候,就会自动在第一行写上

#define _CRT_SECURE_NO_WARNINGS 1

VS使用java VS使用scanf_源文件_09

 

补充: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啦

最后感谢各位大佬看到这里,如果你喜欢这篇文章的话,求赞求收藏求评论指点,谢谢谢谢谢谢!