错误 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与解决方法...相关推荐

  1. 控制服务器信息不存在或已删除,错误1075:依存服务不存在, 或已标记为删除的解决方法...

    错误1075:依存服务不存在, 或已标记为删除的解决方法 2020年09月09日 | 萬仟网科技 | 我要评论 错误1075:依存服务不存在, 或已标记为删除的解决方法今天帮客户配置服务器的时候,启动 ...

  2. 错误:Parameter ‘0‘ not found.Available parameters are [arg1, arg0, param1, param2]的解决方法

    错误:Parameter '0' not found.Available parameters are [arg1, arg0, param1, param2]的解决方法 参考文章: (1)错误:Pa ...

  3. 错误:Script file ‘D:\software_install\Anaconda_install\Scripts\pip-script.py‘ is not present.完美解决方法

    欢迎大家关注笔者,你的关注是我持续更博的最大动力 原创文章,转载告知,盗版必究 错误:Script file 'D:\software_install\Anaconda_install\Scripts ...

  4. 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) 的一种解决方法 参 ...

  5. 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 ...

  6. spring boot启动类启动 错误: 找不到或无法加载主类 xxx.xxxx.Application 的解决方法

    spring boot启动类启动 错误: 找不到或无法加载主类 xxx.xxxx.Application 的解决方法 导入的一个外部的spring boot项目,运行启动类,忽然提示找不到或者无法加载 ...

  7. 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 ...

  8. VBA常见错误 - “错误3706,未找到提供程序,该程序可能未正确安装”解决方法

    一.问题描述 在利用VBA编程时,引用其它表格数据,出现以下问题: (1)运行"错误3706,未找到提供程序,该程序可能未正确安装". (2)引用数据失败 (3)勾选了Micros ...

  9. ADODB.Connection 错误 '800a0e7a' 未找到提供程序。该程序可能未正确安装。解决方法!...

    [问题描述]调试基于ACCESS+ASP的网站程序的时候,遇到如下错误: ADODB.Connection 错误 '800a0e7a' 未找到提供程序.该程序可能未正确安装. /Inc/Functio ...

  10. 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 ...

最新文章

  1. 小型服务器的操作系统,小型机服务器的操作系统
  2. squirrel-foundation-demo
  3. vue修改计算属性的值_Vue语法高级之计算属性和侦听器
  4. 按月拆分数据库表--oracle
  5. python自动保存ping结果_利用python获取Ping结果示例代码
  6. linux命令dh f,linux 下 find 命令的高级用法
  7. Echarts图的属性大全,学会绝对可以把Echarts吃的透透的
  8. tomcat设置编码为UTF-8
  9. OBS 录制黑屏的解决方法
  10. 什么是连接池?为什么需要连接池呢?连接池的组成原理又是什么呢?
  11. ios 图片加载内存尺寸_iOS图片内存优化
  12. tplink710n无线打印服务器,tplink710n设置
  13. 使用grep命令抓取报: memory exhausted(内存耗尽)
  14. 墨卡托坐标转GPS坐标
  15. Τεχνική υποστήριξη
  16. 训练fater rcnn时出现path not exist问题
  17. MES与设备层的集成
  18. Unity3D Animator人物模型下沉的一种原因
  19. Spring MVC -- xxx conflicts with existing xxx
  20. linux系统显卡显存容量,Linux 查看显卡显存大小

热门文章

  1. 计算1024的阶乘结果有多少个0
  2. TCP 与 UDP的区别
  3. 存word到oracle,Word、Excel、PDF存入oracle 数据库
  4. Typora + PicGo + Gitee 搭建图床
  5. MBSE咨询服务与工具——MBSE在汽车行业的应用
  6. java生成者消费者模式,java生产消费者模式
  7. wxPageMixins:为微信小程序Page页面增加mixins功能
  8. springboot+mybatis启动报错:No suitable driver found for xxx
  9. 将IDEA快捷键设置成eclipse
  10. 游戏制作第四棒——坦克大战