【一劳永逸的解决Visual Studio中scanf函数报错的方法】

一.选择VS的原因

俗话说:“工欲善其事必先利其器”,有一个好的工具往往可以极大的帮助我们更好的去解决我们的事情。VS是(Visual Studio)的缩写,它是微软公司旗下的一种全面的集成开发环境 (IDE)。我们知道C语⾔是⼀⻔编译型的计算机语⾔,需要依赖编译器将计算机语⾔转换成机器能够执⾏的机器指令;所以在学习工具上的选择还是比较重要的。VS里集成了msvc编译器,集代码编写功能、分析功能、编译功能、调试功能等诸多功能于一体。我选择的是vs2022的版本,下面我来讲讲缘由:

优点:

  • 免费!VS为个人用户提供了免费的社区版本,可以减少学习成本。
  • VS是主流的集成开发环境,背靠大厂软件的维护这些的都较好;并且在企业中使⽤也较为普遍。
  • 对新手友好,不用自己去搭建环境,直接安装即可使⽤,基本不⽤额外配置环境;并且默认界面是中文的。
  • VS包含了编辑器+编译器+调试器,功能强⼤;并且可以调整我们写出的代码格式,有助于我们养成写出好看的代码格式。

缺点:

  • 功能丰富导致安装包较大,比较占用内存。

鱼与熊掌不能兼得,所有东西都会有自己的缺点;我们在权衡利弊之后能够接受他的缺点,那我们便可以大胆的去选择他!

二.scanf函数报错的原因

几乎在所有的VS版本中,在使用scanf这个函数时都会报错;那为什么会报错呢?报的是一个什么样的错误呢?下面我们一块来看看:

我们在VS中正常使用scanf这个函数时几乎会都会出现这么一个错误:

那究竟是为什么呢?我们把这个报错的信息拿出来看看:

这个大概的意思呢是:VS觉得scanf这个函数可能不安全,让我们考虑使用scanf_s这个函数,如果要弃用这个警告,让我们需要使用(_CRT_SECURE_NO_WARNINGS)。这样一看,那解决这个错误的方法就有两种了。后面再给大家讲这两种方法,这里我们先来看看VS为什么会觉得scanf这个函数不安全。

scanf函数在使用%s这个占位符的时候呢,可能会存在潜在问题;scanf函数在将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度。在储存字符串时, 很可能会超过数组的边界,这将会导致预想不到的结果。

我们发现虽然输出了我们从键盘输入的内容,但是又报了另外的错误;那么这个又是什么错误呢?这是一个调试错误,告诉我们说运行时检查失败了,这个变量“ch”周围的堆栈以损坏。那原因又是什么呢?其实就是储存这个字符串的时候超过了数组设定的边界,ch数组只能储存5个字符,而我们输入了7个字符;超过了这个边界造成了堆栈的损坏。由于scanf函数默认不会检测字符串是否超过了数组⻓度,所以VS认为scanf这个函数可能会不安全,存在有潜在的隐患。

三.解决方法

1.采用scanf_s函数(不建议!

为什么不建议使用scanf_s这个函数呢?因为这个scanf_s这个函数的使用方式跟scanf函数不完全一致,如果不了解scanf_s这个函数就使用可能会导致出现更多的错误!如果想使用scanf_s函数就需要去了解好这个函数具体的使用方法,这里并不是直接将scanf改成scanf_s就完事了。直接改成scanf_s或许可以解决当前的问题,但并不能代表可以解决后面遇到的其他问题,这就会存在潜在的问题;并且使用scanf_s后可能会导致你的代码放到其他编译器下编译不过去的问题。综上所以这里不建议大家采用这种方法。

2.一劳永逸的方法

VS给的建议里面还有另外一种方法,就是使用这个(_CRT_SECURE_NO_WARNINGS),那这个该怎样来用呢?这里需要用到#define;是用来定义符号用的。

我们只需要将(#define _CRT_SECURE_NO_WARNINGS)写在我们创建的源文件(.c文件和.cpp文件)的第一行就能解决这个问题。

这样即可!

那么这样不是每次都得要在第一行加上这个里面?说好的一劳永逸的办法呢?不用着急,接下来就给大家讲这个一劳永逸的办法!其实我们创建源文是从一个叫(newc++file.cpp)这个文件拷贝过来的我们只需要找到这个文件,用记事本打开它,并在里面加上 #define_CRT_SECURE_NO_WARNINGS 这句话,然后保存即可达到一劳永逸的目的。具体步奏我们仔细来看看:

  • 首先我们找到newc++file.cpp这个文件,这里给大家推荐一个软件叫Everthing,是一个用来找文件用的软件,可以帮我们快速找到需要的文件,大家在找的时候记得一定要认准官网,这是个免费的软件,如找的需要付费的就是找错了建议卸载了重新再找!(如果电脑里装了多个版本的VS的软件,记得一定要选择对应版本的newc++file.cpp文件

  • 然后我们复制一份到放到桌面,为什么要放到桌面呢?直接在这里打开加上这句话不可以吗?如果直接在这里加会保存不了;因为权限不够,桌面的权限更高放在桌面去添加这句话便能正常保存!

  • 然后我们在使用记事本打开newc++file.cpp这个文件,里面应该是空白的;我们把#define _CRT_SECURE_NO_WARNINGS这句话加进去,记得点保存。然后我们在从桌面复制这个文件到我们在开始找到newc++file.cpp这个文件的位置;在这里替换掉这个newc++file.cpp文件。就成功完成了!

  • 注意事项切记不能弄丢了newc++file.cpp这个文件!否则会在创建源文件时没有C++文件(.cpp)这个选项

就是会没有这个选项:

  • 并且我们在创建源文件时需要不能在紧凑视图界面里创建源文件,否则也不能到的我们需要的需求。

紧凑视图为这样:(不能在此创建源文件,不然达不到我们需要的效果)

需要在这个界面中新建源文件才能达到效果:

到这里就完啦!你学会了这个方法吗?如果有正在被这个问题困扰的朋友可以去试试,保证真实有效哦。最后感谢您的阅读,如果能帮助到您;胜感荣幸!      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值