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

您所在的位置:网站首页 cpt109 error C4996: 'scanf': This function or variable may be unsafe的解决方法

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

2023-09-14 20:41| 来源: 网络整理| 查看: 265

error C4996: 'scanf': This function or variable may be unsafe的解决方法 1、问题描述 2、解决方案 2.1、使用#define _CRT_SECURE_NO_WARNINGS宏定义 2.2、使用#pragma warning(disable:4996) 2.3、通过修改vs工程属性的预处理器定义进行解决 总结

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工程属性的预处理器定义进行解决

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3