VS2022中关于scanf函数报错解决方法

  • Post author:
  • Post category:其他



VS虐你千百遍,但是你还是对他如初恋啊!

首先我们先了解一下什么是


scanf


函数:在我们刚开始学习c语言的时候不妨会接触到这个家伙,


scanf


函数是一个输入流函数(读取你从键盘输入的值重新给变量赋值)。

int X = 0;
int Y = 0;

scanf("%d %d", &X, &Y);//改变一个变量的值,应该传址。可以联想一下指针

当大佬在敲的时候,咦!这个函数这样子用么这不简简单单砍瓜切菜一样,然后我也上手在我刚刚装好的VS2022上胡乱一顿猛敲,好不容易可以做一个小小计算器(只能用来计算四则运算)当我满怀成就感时,


Ctrl + F5




(VS中开始执行不调试快捷键)

哐当一下白色报错小窗口弹出来,这对当时俺们小白的心情是非常难受的,出现一大堆看不懂的英文


为什么会出这样的错误呢?是我们哪里操作失误还是编译器出问题了呢?

没错还真是编译器的问题:


scanf


函数在VS编译器底下他认为是一个不安全的函数,会导致数组越界,返回值忽略等一系列问题。

举个例子:

char ch[5];

scanf("%s", ch);  //输入abcd

printf("%s\n",ch);  //正常输出abcd

scanf("%s", ch);  //输入abcdefg

printf("%s\n",ch);  //此时已经报错,报错原因是输入时超过原数组的大小导致数组越界
                    //访问到不属于该数组的范围

所以VS他推荐我们要使用 scan_f  这个函数,这个函数不是C语言里面的,他是编译器自己的函数。但是一直都是用


scanf


这个函数啊!你让我又重新学一个陌生的我肯定是不是特别愿意的。

可是我想用VS编译怎么办,接下来就是解决的办法;

解决办法有两种:


第一种:宏定义



第二种:禁止C4996报错



方法一   宏定义:在我们的c源文件的开头加上辣么一句代码







#define _CRT_SECURE_NO_WARNINGS

虽然还是有警告,报错的问题可以完美解决,但是每次写代码我都要写一句这样的这么长一段英文我也记不住啊,那我还不如去学scan-f这个函数对吧。当然我们可以一劳永逸,在此电脑找到对应路径


D:\vs2022\vsIDE\Common7\IDE\VC\VCProjectItems

当然这个是我自己安装的 VS D盘,然后在对应路径找到

newc++file.cpp

文件右击鼠标用记事本打开,然后再把刚刚代码


#define _CRT_SECURE_NO_WARNINGS

写入到记事本保存即可。

要是保存失败我们把

newc++file.cpp

拷贝一份放到桌面,然后我们再把刚刚代码放入刚刚拷贝到桌面的

newc++file.cpp

里面,保存后拖回原来路径下覆盖即可,当我们下次再创建一个源文件时就会在最开始第一行地方出现了



方法二   禁止C4996报错:

这个方法呢不是一劳永逸,每次创建工程都要来一遍要是感觉第一种方法繁琐可以采用第二种。

找到调试 -> 找到最后一行调试属性进入

找到 C/C++ 展开找到高级

然后我们看到右边,禁用特定警告  在里面我们输入

4996

确定即可

这个方法就是每次创建工程都要来一遍,不过找多了也熟悉,就像开关机一样。

以上就是此篇所有内容啦,感谢大家支持!!!



版权声明:本文为weixin_57663528原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。