SCANF函数

use _CRT_SECURE_NO_WARNINGS

错误 1 error C4996: ‘scanf’: This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.
“scanf”使用错误,这个函数或变量可能是不安全的,考虑使用scanf_s代替,要放弃禁用,使用_CRT_SECURE_NO_WARNINGS.

为什么编译器会说scanf是不安全的函数呢?
那是scanf()在读取数据的时候不会检查边界,如果编程的时候输入的数据大于分配的内存空间,进而会导致程序的运行异常。
而scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。
先来说说 scanf_s这个函数的用法:
char arr[5]={‘\0’};
scanf_s(“%s”,arr,10);
scanf_s()在读取数据的时候会检查边界,如果输入的数据达到了所请求的内存空间,则不会再读入数据。即这里只能接受前9个字符。这种方法确实避免了字符串越界,但是很多情况下,我们是没法预先知道字符串长度的(在你不去数的情况下),那么这个函数就带来了很大的麻烦。
还有一个问题,既然scanf_s是微软公司提供的一个安全标准输入函数,它的跨平台性到底怎么样,这个问题基于我目前还无法解答。

下面说说怎么继续使用scanf而消除错误:
1. 右击工程 - 属性 - 配置属性 - C/C++ - 命令行
命令行增加 /D _CRT_SECURE_NO_WARNINGS
2. 定义一个宏 #define _CRT_SECURE_NO_WARNINGS 这个宏定义得放“#include<>”的前面。
3. 在项目->属性->C/C++->预处理器->预处理器定义中添加 _CRT_SECURE_NO_WARNINGS 这个预定义。
这样小伙伴们又能愉快的使用scanf来写代码了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值