1. scanf函数在VS上无法使用
相信大家在vs编译器上,第一次使用scanf的时候会遇到一个问题:无法使用scanf函数,使用就报错。如下图所示。
是什么原因导致这种情况呢?其实vs编译器已经给出了解释,在编写区的下方的信息提示区,如下图所示。意思是:scanf这个函数或者参数可能不安全,考虑使用scanf_s代替。
2. 为什么vs不让使用scanf
VS编译器不让使用scanf函数,是因为scanf这个函数本身就存在问题。scanf在使用%s读取字符串的时候可能会导致越界访问。为了避免这种情况,VS编译器就实现了只属于自己平台的标准输入函数scanf_s,并且强烈推荐大家使用。于是出现了限制使用scanf的情况,一用就会报错。
举个例子:使用scanf函数输入字符串到长度为10的数组中去。代码和运行结果如下。scanf函数在读取字符串时,是不会管存储字符串的那块空间是否能够放得下,它只会一股脑的往里面赛,越界了也继续塞,必然导致程序崩溃。
#include<stdio.h>
int main()
{
char arr[10];
scanf("%s", arr);
return 0;
}
3. 解决方法
如果大家想在vs编译器上使用scanf这个函数,并且不会报错,该怎么做呢?其实vs编译器也告诉大家了,如下图所示。意思是:如果想使得scanf的报错失效,就使用_CRT_SECURE_NO_WARNINGS
这一段话。
在源文件第一行写上#define _CRT_SECURE_NO_WARNINGS
这一段代码,就可以解决scanf报错的问题了。但是唯一不足的就是每次创建源文件时,都需要在文件开头敲上这段代码。那怎样能够一劳永逸的解决这个问题呢?方法如下:
- 安装一个工具everything。
- 用everything搜索一个文件
newc++file.cpp
,右击选中它,点击打开路径。
- 将该文件拷贝一份放置桌面,然后用选择打开方式,用VS打开。
- 在VS编译器内存入一句话:
#define _CRT_SECURE_NO_WARNINGS
,然后保存并退出。 - 将文件拖入原文件所在位置,并替换原文件。
这样就使得每次创建源文件的时候第一行始终存在:#define _CRT_SECURE_NO_WARNINGS
了。
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。