关于scanf函数在编译器中报错的情况分析与解决(取消报错)

关于scanf函数在编译器中报错的情况分析与解决(取消报错)

相信很多人都遇到过这样的警告(VS2008),甚至在有些编译器上直接报错(VS2012)。

 

放图(过后补图)因为我最近用的是vim所以只能过后补图,不过大家放心以下所写博主在之前已经用VS下的编译器验证过了。

 scanf函数在编译器中报错,这是为什么呢,是什么造成的呢?我们根据编译器的提示可以看到编译器说这个函数是不安全的,原因是他不会检测放入元素是否超过原定大小,比如说向数组中放入比原定大小大的数组从而发生越界,这时候编译器就提出让我们考虑把scanf换成编译器自己提供的函数scanf_s。这是第一种方法;我们按编译器的提示把所有的scanf换成scanf_s,使警告消失。

但这种方法是有缺陷的,因为scanf_s其实是编译器自己提供的函数,它并不符合标准,如果把有scanf_s的代码移植到其他的编译器上时它就有可能出现问题。于是在这里再为大家提供一种方法,不用在程序中出现不符合标准的scanf_s,可以接着用标准的scanf并不报警告或错误。这种方法是;只要在#include <stdio.h>前添加

#define _CRT_SECURE_NO_DEPRECATE   1  

 

总结一下,解决这类问题有两种做法;

 

 

  1. 按编译器的提示把所有的scanf换成scanf_s,使警告消失。
  2. 在#include <stdio.h>前添加define  _CRT_SECURE_NO_DEPRECATE  1

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值