一,scanf函数报错的原因
我们常见的scanf函数报错的现象
以下内容只针对visual studio 2022(以下简称vs2022)
这就是我们使用scanf函数会出现的问题,那么读者肯定会有疑问既然c语言中已经明确规定了scanf函数就是作为输入数据的函数,那为什么在vs2022这个编译器中却不让用呢?
下面我们来分析一下为什么会出现这样的问题
错误 C4996 ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
首先我们先来理解一下这句话的意思,这句话大概说:“scanf是不安全的,需要用scanf_s来替换 或者使用 _CRT_SECURE_NO_WARNINGS才能避免报错”
我们首先来说说为vs觉得scanf函数是不安全的,举个例子:
这里先用_CRT_SECURE_NO_WARNINGS这一种方法作为例子演示(如何使用该方法会在后面详细解释)
#define _CRT_SECURE_NO_WARNINGS //定义_CRT_SECURE_NO_WARNINGS在第一行
#include<stdio.h>
int main()
{
char arr[3]; //定义一个字符数组 数组(能存放多个数据)
scanf("%s",arr);//输入“abcd”
printf("%s",arr);//输出“abcd”
return 0;
}
此时我们输入abcd,就会得到下面这个结果:
这里要补充一下数组,c语言中我们定义数组是不允许数据越界的,比如上面的数组 arr[3]其中3就是arr这个数组的界限,我们在给这个数组输入数据的时候不能超过3个但是细心的读者会发现我们输入了abcd4个字母,它竟然给我们打印出来了,这在c语言中显然是不合法的所以编译器也给我们报了个错误提醒我们。 这就是为什么vs2022认为scanf函数是不安全的原因。
二,scanf函数报错的解决方法
当我们已经了解了我们在vs2022中使用scanf函数报错的原因后接下来我们就来给出我们对于scanf函数报错的解决方法。
1.使用scanf_s替换
当我们遇到scanf函数报错时我们可以***使用scanf_s来替换scanf***这样就能使程序正常运行。但对于scanf_s的使用有以下建议:
(1)初学c语言最好不要使用scanf_s原因有2点,1.是 scanf_s只在vs2022中有定义,换句话说scanf_s是vs2022这个编译器中特有的函数在其他的编译器中使用是运行不起来的。2.是scanf_s与scanf函数有些不一样初学者使用可能会用错。
(2)使用_CRT_SECURE_NO_WARNINGS 这是编者最推荐的一种做法即在我们每次打开vs2022这个编译器的的时候在第一行写下这句话: #define _CRT_SECURE_NO_WARNINGS(注意define后有一个空格)。
但是还有一个问题如果我们每次打开vs2022都要手动加上这句话肯定会累死,接下来我就手把手教你如何让你每次在打开vs2022创建好源文件的时候自动加上这句话。
2.使用_CRT_SECURE_NO_WARNINGS(推荐)
第一步先复制好#define _CRT_SECURE_NO_WARNINGS这句话
第二步打开我们电脑的文件资源管理器,去你安装vs2022的那个盘c盘或d盘(取决于你的安装路径)或其他盘上搜索newc++file.cpp
第三步选中带文件右击鼠标打开文件所在的位置(注意打开后不要关掉)
第四步将newc++file.cpp复制 到桌面然后右击鼠标用记事本打开,复制第一步的那句话
第五步关掉记事本保存后将你桌面的那个newc++file.cpp拖回那个文件所在的位置,选择替换目标文件就大功告成了
这个方法的原理就是我们每次在vs创建了一个源文件后,源文件就会拷贝newc++file.cpp这个文件的内容,如果我们在该文件的第一行加上了#define _CRT_SECURE_NO_WARNINGS这句话就相当于我们每次创建源文件的拷贝的时候自动给我们加上这句话。
以上就是vs2022 scanf报错的原因及解决方法了如果你觉得有用,或者能够帮到你的话不妨给我点个免费的赞,你们的点赞就是我最大的动力谢谢各位!如有问题欢迎指出共同学习!