当前位置:网站首页>Visual Studio编辑器 2019:scanf函数返回值被忽略(C4996)报错及解决办法
Visual Studio编辑器 2019:scanf函数返回值被忽略(C4996)报错及解决办法
2022-07-30 16:00:00 【我想吃个西瓜】
问题描述:
使用VS编辑器编写C语言代码时,调用scanf()函数输入内容时候报错。
错误代码:C4996

问题原因:
VS编译器认为直接使用C语言定义的函数scanf()不检查边界,不安全。scanf()等函数存在于版本较旧的CRT(C runtime library, part of the C standard library)中,具有安全性问题,比如在读取字符时,若不指定%s的宽度,可能会导致缓冲区溢出。
解决办法:
- 一、改用scanf_s()函数
- 使用VS编译器所提供的包括 scanf_s、wscanf_s等以_s结尾版本的函数具有安全增强功能。直接将VS编译器中的scanf()函数后加入_s即可。该方法对于已经习惯调用scanf()函数的朋友们来说,属于是治标不治本。
- 举一个栗子方便大家理解:自己的写的代码相当于货物,scanf()函数是货物里面的一部分,但该部分在其安检部门(SDL检查)看来是不安全的,因此货物无法通过,但scanf_s函数在安检部门看起来是安全的,就可以顺利通过。
- 二、找到并关闭VS中的SDL检查
- 右键“项目文件” — “属性” — “配置属性” — “C/C++”— “常规”— “SDL检查”改为“否”即可

- 这个只针对于该项目,关闭了本次项目的SDL检查(安全开发周期检查)。关闭SDL检查相当于绕过安监部门(SDL检查),直接出货。
- 三、在程序开通使用pragma命令
#pragma warning(disable:4996) 将一个warning作为一个错误 或者 #pragma warning(once:4996) 将一个warning禁用掉- 这里需要注意pragma命令只对当前文件有效(对于.h,对包含它的cpp也是有效的),而不是对整个项目的所有文件有效。当该文件编译结束,设置也就失去作用。
- 可以理解为只有这一个货物在通过安检部门(SDL检查)的时候耍流氓,所以顺利通过。
- 补充说明pragma函数:
#pragma warning(push) 存储当前报警设置。 #pragma warning(push, n) 存储当前报警设置,并设置报警级别为n。n为从1到4的自然数。 #pragma warning(pop) 恢复之前压入堆栈的报警设置。 在一对push和pop之间作的任何报警相关设置都将失效。 #pragma warning(disable: n) 将某个警报置为失效 #pragma warning(default: n) 将报警置为默认 某些警告如C4309是从上到下生效的。即文件内#pragma warning从上到下遍历,依次生效。- 四、更改头文件,添加宏定义
- 将#define _CRT_SECURE_NO_WARNINGS宏定义置于源文件的顶部,来忽略警告问题,此方法属于这一批货物都耍流氓,对其忽略,所以也可以通过。
- 也可以在编译器内部的预定义进行修改:右键“项目文件” — “属性” — “配置属性” — “C/C++”— “预编译器”— “预编译器定义”添加“”即可

- 也可以修改VS编译器安装路径下的“newc++file.cpp”文件,该方法有一定风险,此处不再展开,有需要的小伙伴可以自行搜索。
边栏推荐
猜你喜欢

谷歌工程师『代码补全』工具;『Transformers NLP』随书代码;FastAPI开发模板;PyTorch模型加速工具;前沿论文 | ShowMeAI资讯日报

@Bean注解详解

rhce笔记2

【HMS core】【Media】【Video Editing Service】 The online material cannot be displayed, it is always in the loading state or the network is abnormal
![[HMS core] [FAQ] Collection of typical problems of push kit, AR Engine, advertising service, scanning service 2](/img/08/9f2c7d1ea704f234c2a1882f85df24.png)
[HMS core] [FAQ] Collection of typical problems of push kit, AR Engine, advertising service, scanning service 2

Image information extraction DEM

大型综合办公管理系统源码(OA+HR+CRM)源码免费分享

Leetcode 119. 杨辉三角 II

【HMS core】【FAQ】push kit、分析服务、视频编辑服务典型问题合集3
![[AGC] Quality Service 2 - Performance Management Example](/img/09/4a7c57f5aa651e4ac58d1e6d73afe6.png)
[AGC] Quality Service 2 - Performance Management Example
随机推荐
五只小猪的案例(五只小猪 比较体重的大小)
游戏显示分辨率的逆向分析
RobotStudio实现喷漆、打磨等功能(曲面路径生成与仿真)
完美绕开CRC32检测的无痕hook
Promise笔记(一)
PMP每日一练 | 考试不迷路-7.30(包含敏捷+多选)
How to remove first character from php string
Sparse-PointNet: See Further in Autonomous Vehicles 论文笔记
php how to query string occurrence position
Store Limit usage documentation
开源WebGIS架构
How to remove last character from string in php
三维重建方法汇总
游戏窗口化的逆向分析
Database - SQL
新人学习小熊派网络应用开发
为什么数据需要序列化
Classes and Objects (Part 2)
数组元素逆置
node.js中怎么连接redis?