error C4996: 'scanf': This function or variable may be unsafe的解决方法

1、问题描述

        在vs2013工程的使用中,当我们使用scanf、fopen等函数时,经常会遇到vs软件安全性检测引起的报错。如下,以使用scanf为例,显示的错误信息如下:

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、fopen等函数换成其对应的安全性函数scanf_s、fopen_s的话,可以使用以下介绍的三种解决方案:

2、解决方案

2.1、使用#define _CRT_SECURE_NO_WARNINGS宏定义

        在报错的文件最前面加上#define _CRT_SECURE_NO_WARNINGS这个宏定义。注意要加在#include前面,如下:

在这里插入图片描述

2.2、使用#pragma warning(disable:4996)

        在报错的文件中加上如下的预处理指令(加在报错的函数前的任意位置都行,但建议将其加在#include后面):

                  #pragma warning(disable:4996)

        其作用就是屏蔽 4996号(这个错误编号在报错信息里是有说明的)的警告信息,使工程正常编译。如下:

在这里插入图片描述

2.3、通过修改vs工程属性的预处理器定义进行解决

        上述的两个方法都是针对单一文件中进行修改的;其安全性检测关闭的作用范围也是只对当前文件有效。若要对整个工程文件的安全性检测进行关闭;可以通过如下步骤进行:
        (1)、Project Properties -> Configuration Properties -> C/C++ -> Preprocessor -> Preprocessor Definitions
        若您的vs是汉化版本,对应的操作如下:右键当前工程名 -> 属性 -> 配置属性 -> C/C++ ->预处理器 -> 预处理定义

在这里插入图片描述

        (2)、点击上图中预处理定义后面的下三角箭头 -> 编辑 -> 在最下面输入如下指令并进行保存

                   _CRT_SECURE_NO_WARNINGS

在这里插入图片描述

总结

        当我们在vs中使用scanf、fopen等函数时,经常会遇到vs软件安全性检测引起的报错。此时若不想将报错函数更换成其指定的安全性函数。可以通过如下三种方式解决:

  • 在文件开头加上#define _CRT_SECURE_NO_WARNINGS这个宏定义
  • 在文件开头加上#pragma warning(disable:4996)这个预处理指令
  • 通过修改vs工程属性的预处理器定义进行解决

        其中,前面两点是比较方便的,但注意其安全性检测关闭的作用范围只是对当前文件有效;最后一种则是针对整个工程文件进行的修改。所以,如果我们想完全不做安全检查,就使用最后这种方法;如果只是想针对某些文件不做安全性检查,则可以在这些文件中使用前面两种方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值