【VS】如何解决VS编译器scanf报错问题
慕雪年华

[toc]

问题来源

当我们使用vs编译器编译c语言代码,并需要用到一些非常常用的库函数的时候(如scanf)

vs编译器通常会报出如下错误

image

  • 有的时候即便报错了,程序也可以正常运行

  • 但有的时候就会同图中一样,程序无法运行

出现这个错误的原因是vs编译器认为这些库函数是“不安全的”(我可真谢谢你,担duo心guan那xian么shi多,微软)

解决方法

解决这个报错问题的方法有两种

1.使用_S下标

如图所示,我们可以在库函数后面加一个_s,这时候vs就会把它认为是“安全的函数”,程序就可以正常运行了

image

方法一的致命缺点

但是这么做有一个非常大的弊端——该代码只能在vs编译器里运行

如图,如果我们将这一串带_S的代码复制到**devc++**这款编译器里面

devc++编译器会报错,无法运行这串代码

同样的,如果你需要在mooc、牛客网或者其他刷题网站上填写代码的时候

系统也无法运行这种带了_s的c语言代码

这时候代码的“可移植性” (即通用性)就变差了!

image

这时候就需要我们的解决方法2了

2.使用防报错语句

只需要在这个源文件的第一行添加这样一串代码

1
#define _CRT_SECURE_NO_WARNINGS 1

这串代码的作用就是屏蔽掉vs编译器对函数危险性的排查报错

如图所示,我们的代码就能正常运行了

image

这样操作,即便是将这一行防报错代码移植到另外一个编译器里,这串代码仍然能正常运行
而且有的时候即便加上_s,还是会出现一些和scanf无关的奇怪报错
使用方法二就能解决这个问题,这里建议大家还是使用方法二啦!

image

方法二的缺点?

你可能会说,那我岂不是每次写代码之前都需要打上这么一个define语句,那样也太麻烦了吧!

再说了,我也背不下来啊!

别急,下面我就会告诉你怎么让vs编译器每次创建源文件的时候自动带上这么一串代码

如何在vs编译器里加上默认语句

这里我们需要用到另外一款同样很经典的软件——Notepad++

如果你还没安装这款软件,这里是下载链接——> [点我]

image

安装完成后,我们点击左上角的 文件

image

打开如下路径里,箭头所指的new++file文件

vs编译器默认安装路径是c盘

如果你的vs编译器不在c盘,可以通过右键桌面vs编译器的快捷方式,打开文件所在的位置,找到你vs编译器的安装路径

image

打开以后是空白的

我们只需要讲这行define语句加入这个文件,ctrl+s保存

由于vs编译器处于c盘,修改这个文件需要申请管理员权限,点击同意即可!

1
2
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

image

这时候你创建的新的源文件,就会默认带上这串代码啦!

由于<stdio.h>这个头文件实在是太常用了,所以我把它也加入了这个文件里。

如果你愿意,也可以把int main()加入这个文件,方法同上

image

这样就不用每次创建新的源文件的时候自己手打啦!

一劳永逸!


结语

如果这篇文章对你有帮助的话,还请点个赞!

万分感谢!