问题描述
我们输入这样一段代码:
int main()
{
int score = 0;
printf("请输入成绩:");
scanf("%d", &score);
printf("你的成绩是%d", score);
return 0;
}
运行结果:
刚学C程序设计的小伙伴们在使用VS编译器时都会有一个疑问?scanf()函数在使用使用时为什么IDE会报错,难到时自己敲错了吗?经过反复检查之后还是没有解决,这时候我们不妨看看报错是怎么描述的:'scanf': This function or variable may be unsafe.Consider using scanf_s instead.To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
报错原因
VS认为scanf函数不安全,所以使用时会报错。如果想要这个错误失效,可以使用VS编译器自带的scanf_s替换。scanf_s函数是VS这个IDE提供的,不是C语言标准库中的函数。
解决方案
法一:如果将scanf用scanf_s代替,就意味着你的代码在其他的编译器上是不能 通过编译,使得代码降低了可以移植性。
法二:
我们可以看到报错:To disable deprecation, use _CRT_SECURE_NO_WARNINGS.所以我们可以在当前代码的第一行(必须是第一行)加上:#define _CRT_SECURE_NO_WARNINGS,但是每一次写代码都需要加一次,为了避免重复性的操作,让每一个我们创建的.c文件中自动加上,#define _CRT_SECURE_NO_WARNINGS。在VS安装路径下有一个newc++file.cpp的文件,所有新建的.c/.cpp的文件都是拷贝newc++file.cpp这个文件!所以只需要在newc++file.cpp这个文件中加上:#define _CRT_SECURE_NO_WARNINGS后就可以在每一次新建的.c/.cpp文件中的第一行自动添加#define _CRT_SECURE_NO_WARNINGS。
这里给大家推荐一个小工具Everything:
Everything是由voidtools开发的一款文件搜索工具,这款软件是基于名称实时定位文件和目录。Everything功能强大,体积小巧,第一次安装使用时会建立一个索引数据库,将所有文件和文件夹的名称导入其中,后续使用能够以极快的速度快速搜索,查找到你所需要的文件。
下载链接:Everything电脑版
操作步骤:
第一步:打开下载好的Everything小工具
第二步:搜索 newc++file.cpp这个文件
第三步:右击鼠标点击打开路径
我们可以看到newc++file.cpp这个文件在我们电脑中的文件路径。
第四步:右击鼠标去编辑,打开方式可以选择记事本也可以选择VS ,这里我们选择记事本打开;
第五步:在记事本文件中加入:#define _CRT_SECURE_NO_WARNINGS后保存
注意:这里可有部分用户保存时提示权限不够。解决方式是将newc++file.cpp文件拷贝一份到桌面上,因为桌面上的权限是比较高的。然后在桌面上用记事本或其他打开去编辑保存,然后将桌面上的文件拷贝到原newc++file.cpp文件目录下替换未修改前的newc++file.cpp文件即可。这样就可以达到一劳永逸的使用scanf()函数。
方法三:
使用#pragma warning(disable:4996)
处理警告,处理的建议是disable失效4996这个警告: