c语言scanf错误c4996,C语言常见错误杂谈(一)scanf()、scanf_s()与错误 C4996与解决方法...
错误 C4996
初学C语言时,第一个接触到的I/O函数便是scanf()了。但在高版本的 Visual Studio (包括但不限于2015、2013、2012)编译代码时,却会出现意想不到的错误。
有如下一段简单的代码:
#include "stdio.h"
int main(void)
{inti;
printf("Input i\n");
scanf("%d", &i);
printf("i is %d", i);return 0;
}
但会输出一个错误 C4996,错误信息如下
错误 1 error 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替换scanf_s。替换之后之后,代码如下
#include "stdio.h"
int main(void)
{inti;
printf("Input i\n");
scanf_s("%d", &i);
printf("i is %d", i);return 0;
}
便没有错误提示了。
scanf与scanf_s
在MSDN有介绍这些以_s结尾的函数,包括 scanf_s、scanf_s_l、wscanf_s、_wscanf_s_l。这些版本的函数具有安全增强功能。
scanf等函数存在于版本较旧的CRT(C runtime library, part of the C standard library)中,具有安全性问题,比如在读取字符时,若不指定%s的宽度,可能会导致缓冲区溢出。
在使用scanf时,如果规定了读取的宽度,便不会报错。将代码修改如下:
#include "stdio.h"
int main(void)
{inti;
printf("Input i\n");
scanf_s("%5d", &i);
printf("i is %d", i);return 0;
}
这里控制了读入的%d宽度为5。但是读入的数据超过宽度的限制时,便会丢失数据。比如这是输入100000,输出的i值为10000。
解决方法
1.使用scanf时规定宽度。
2.使用sacnf_s替换sacnf。
3.在新建项目的时候取消SDL检查。
本文由 whchina(江城老温)原创发布,转载请注明出处,江城老温 as a thinker。
c语言scanf错误c4996,C语言常见错误杂谈(一)scanf()、scanf_s()与错误 C4996与解决方法...相关推荐
- 控制服务器信息不存在或已删除,错误1075:依存服务不存在, 或已标记为删除的解决方法...
错误1075:依存服务不存在, 或已标记为删除的解决方法 2020年09月09日 | 萬仟网科技 | 我要评论 错误1075:依存服务不存在, 或已标记为删除的解决方法今天帮客户配置服务器的时候,启动 ...
- 错误:Parameter ‘0‘ not found.Available parameters are [arg1, arg0, param1, param2]的解决方法
错误:Parameter '0' not found.Available parameters are [arg1, arg0, param1, param2]的解决方法 参考文章: (1)错误:Pa ...
- 错误:Script file ‘D:\software_install\Anaconda_install\Scripts\pip-script.py‘ is not present.完美解决方法
欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 错误:Script file 'D:\software_install\Anaconda_install\Scripts ...
- Django链接Mysql 8.0 出现错误(1045:Access denied for user ‘root‘@‘localhost‘ (using password: NO) 的一种解决方法
Django链接Mysql 8.0 出现错误(1045:Access denied for user 'root'@'localhost' (using password: NO) 的一种解决方法 参 ...
- mysql 1093 you can_mysql中错误:1093-You can’t specify target table for update in FROM clause的解决方法...
发现问题 最近在处理一些数据库中数据的时候,写了下面的这一条sql语句: UPDATE f_student SET school_id = 0 WHERE id > ( SELECT id FR ...
- spring boot启动类启动 错误: 找不到或无法加载主类 xxx.xxxx.Application 的解决方法
spring boot启动类启动 错误: 找不到或无法加载主类 xxx.xxxx.Application 的解决方法 导入的一个外部的spring boot项目,运行启动类,忽然提示找不到或者无法加载 ...
- C4996 ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead.错误提示
最近在在使用visual studio创建C语言的时候遇到的错误: 如下: C4996 'scanf': This function or variable may be unsafe. Consid ...
- VBA常见错误 - “错误3706,未找到提供程序,该程序可能未正确安装”解决方法
一.问题描述 在利用VBA编程时,引用其它表格数据,出现以下问题: (1)运行"错误3706,未找到提供程序,该程序可能未正确安装". (2)引用数据失败 (3)勾选了Micros ...
- ADODB.Connection 错误 '800a0e7a' 未找到提供程序。该程序可能未正确安装。解决方法!...
[问题描述]调试基于ACCESS+ASP的网站程序的时候,遇到如下错误: ADODB.Connection 错误 '800a0e7a' 未找到提供程序.该程序可能未正确安装. /Inc/Functio ...
- TypeScript语法错误:Argument of type ‘string‘ is not assignable to parameter of type ‘Element‘. 解决方法
问题描述 DOM插入元素节点报错. TypeScript语法错误: TS2345: Argument of type 'string' is not assignable to parameter o ...
最新文章
- 小型服务器的操作系统,小型机服务器的操作系统
- squirrel-foundation-demo
- vue修改计算属性的值_Vue语法高级之计算属性和侦听器
- 按月拆分数据库表--oracle
- python自动保存ping结果_利用python获取Ping结果示例代码
- linux命令dh f,linux 下 find 命令的高级用法
- Echarts图的属性大全,学会绝对可以把Echarts吃的透透的
- tomcat设置编码为UTF-8
- OBS 录制黑屏的解决方法
- 什么是连接池?为什么需要连接池呢?连接池的组成原理又是什么呢?
- ios 图片加载内存尺寸_iOS图片内存优化
- tplink710n无线打印服务器,tplink710n设置
- 使用grep命令抓取报: memory exhausted(内存耗尽)
- 墨卡托坐标转GPS坐标
- Τεχνική υποστήριξη
- 训练fater rcnn时出现path not exist问题
- MES与设备层的集成
- Unity3D Animator人物模型下沉的一种原因
- Spring MVC -- xxx conflicts with existing xxx
- linux系统显卡显存容量,Linux 查看显卡显存大小
热门文章
- 计算1024的阶乘结果有多少个0
- TCP 与 UDP的区别
- 存word到oracle,Word、Excel、PDF存入oracle 数据库
- Typora + PicGo + Gitee 搭建图床
- MBSE咨询服务与工具——MBSE在汽车行业的应用
- java生成者消费者模式,java生产消费者模式
- wxPageMixins:为微信小程序Page页面增加mixins功能
- springboot+mybatis启动报错:No suitable driver found for xxx
- 将IDEA快捷键设置成eclipse
- 游戏制作第四棒——坦克大战