VS2015中”This function or variable may be unsafe.”警告的解决办法
来源:互联网 发布:code.org 是什么软件 编辑:程序博客网 时间:2024/05/21 08:58
VS2015中”This function or variable may be unsafe.”警告的解决办法
问题现象:
问题原因:
C语言的标准函数中,一些读取或写入内存的函数存在内存越界的问题,从而使得内存数据变得不安全。如scanf、gets、strcat等函数都存在着这样的问题。
为了避免这个问题,在VS2015中,另外提供了如scanf_s,get_s,strcat_s等相关的改进函数,来替代原来的标准函数的功能,并通过添加内存读取范围的限制来解决不安全的问题。
在实际的应用中,也许使用VS2015提供的安全函数会更加合理。但是,在学习中,几乎所有的课本以及教程都使用的原来的标准函数,另外考虑到移植性的问题,除了VS2015环境,其他环境中并没有提供改进后的函数。因此,我们通常任然需要标准的库函数来实现相关功能。
但是,如果在VS2015中使用原始的函数,编译器将会报错。这对使用和学习都带来了相当的不变。
问题分析:
在VS2015中,以scanf为例。
如果在程序中使用了scanf函数,如下
#include<stdio.h>int main(void){char s[100];scanf("%s", s);printf("%s", s);}
编译将得到如下错误信息:
错误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.helloworldc:\users\maxhey\documents\visual studio 2015\projects\helloworld\helloworld\源.c1150
错误信息的大意如下:
此函数或变量可能不安全。可以使用scanf_s代替该函数。如果要取消禁用,请定义_CRT_SECURE_NO_WARNINGS。更多信息请查看在线帮助
问题解决:
在编译器给出的错误提示中,实际上已经为我们给出了一个明确的解决方案。我们只需要在程序的开头添加一个宏定义便能够解决问题。
#define _CRT_SECURE_NO_WARNINGS加入宏定义后,源代码变为如下形式
#define _CRT_SECURE_NO_WARNINGS //该语句必须在#include<stdio.h>之前,否则还会报错#include<stdio.h>int main(void){char s[100];scanf("%s", s);printf("%s", s);}
再次进行编译,编译成功完成。
虽然按照上述的方法能够顺利解决问题,但是在实际的应用中,如果我们要求只能够使用标准库中的函数,而不能使用VS为我们提供的改进函数。那么我们每次在使用到相关函数时,都需要在文件前面,或者在头文件中添加相关宏。这样未免太麻烦。
既然我们不需要VS给我们提供的这个多余的改变,那有没有一个一劳永逸的办法解决这个问题呢。
方法是有的,这需要我们对VS的项目属性进行设置,具体步骤如下。
- 在项目属性设置中找到选项卡
配置属性→C/C++→预处理器
; - 在右侧的参数中找到
预处理器定义
,编辑其参数; - 在参数的末尾添加定义
_CRT_SECURE_NO_WARNINGS
这样,在编译器进行预处理时,预处理器就会自动在程序开头添加我们需要的宏定义,而不再需要我们手动添加。
在文件中不添加宏定义的情况下,再次进行编译。发现编译顺利完成。
这种方案因为修改的是项目的配置参数,因此适用于整个项目。在该项目中,将不再需要添加相关宏定义。但是其他项目自然不受该设置的影响,因此,如有需要,在其他项目中需要再次进行相同配置才能生效。
- VS2015中”This function or variable may be unsafe.”警告的解决办法
- 【C语言学习笔记】VS中"This function or variable may be unsafe."警告的解决办法
- VisualStudio中error:C4996'strcpy': This function or variable may be unsafe的解决办法
- [转]This function or variable may be unsafe 解决办法
- 警告;编译中出现 This function or variable may be unsafe.
- This function or variable may be unsafe
- This function or variable may be unsafe
- This function or variable may be unsafe
- This function or variable may be unsafe
- This function or variable may be unsafe
- This function or variable may be unsafe
- This function or variable may be unsafe
- This function or variable may be unsafe
- This function or variable may be unsafe
- 解决VS2012中This function or variable may be unsafe
- 解决This function or variable may be unsafe的方法
- VS提示This function or variable may be unsafe错误的解决办法
- VS2015:error C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead
- 7月13号贝贝网Android实习生面试心得
- iptables
- JavaEE开发之Spring中的多线程编程以及任务定时器详解(有源码)
- 基本概念 Basic concepts
- 剑指offer面试题51 数组中重复的数字
- VS2015中”This function or variable may be unsafe.”警告的解决办法
- 多重背包-可行性poj1742
- android蓝牙开发入门
- TF随笔-7
- Shape 圆弧问题
- Android零基础入门第6节:配置优化SDK Manager,正式约会女神
- leetcode 7 Reverse Integer
- iOS之ReactiveCocoa入门教程
- LeetCode#14 Longest Common Prefix