当前位置:主页 > 查看内容

2021-04-10

发布时间:2021-06-07 00:00| 位朋友查看

简介:c语言轻松解决VS This function or variable may be unsafe的四种简单的方法 问题描述 问题分析 解决办法 问题描述 如图所示我们在使用scanf、gets、strcat等函数都存在着这样的问题。就会有如下报错 This function or variable may be unsafe. Consider usi……

c语言轻松解决VS This function or variable may be unsafe的四种简单的方法

问题描述

在这里插入图片描述
如图所示,我们在使用scanf、gets、strcat等函数都存在着这样的问题。就会有如下报错
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。

问题分析

C语言的标准函数中,一些读取或写入内存的函数存在内存越界的问题,从而使得内存数据变得不安全。函数scanf是标准c中的函数,在调用该函数时,必须提供一个数字以表明最多读取多少位字符,其在读取时不检查边界,所以可能造成内存访问越界,那以scanf函数为例、看如下代码:

#include <stdio.h>
int main()
{
	int arr[3] = { 0 };//定义一个字符数组存,开辟3个字节的空间
	scanf("%s", arr);//假如我们输入hello world,就会导致scanf()多读8个字符,
	return 0;        //则第二个l以后的部分则会被写到别的变量所在的空间上,从而可能导致程序运行异常
	printf("%s", arr);
    scanf_s("%s", arr,3);以上代码如果用scanf_s,正确代码如前面所示表示最多读取3个字符,函数scanf_s的最后一个参数n是缓冲区的大小,表示最多读取n-1个字符。
}

为了防止这一问题,从VC++2005开始,微软公司的VS提供了函数scanf_s。其功能与原版函数scanf 相同,只是后者更安全可靠。

解决办法

提供了如scanf_s,get_s,strcat_s等相关的改进函数,来替代原来的标准函数的功能,并通过添加内存读取范围的限制来解决不安全的问题。在实际的应用中,也许使用提供的安全函数会更加合理。但是,在学习中,几乎所有的课本以及教程都使用的原来的标准函数,另外考虑到移植性的问题。因此,我们通常仍然需要标准的库函数来实现相关功能。
但是,如果在VS中使用原始的函数(我用的是vs2017),编译器将会报错。这对使用和学习都带来了相当的不便。如果只使用VS编写代码,那么还是使用函数scanf_s比较好,毕竟安全可靠,而且使用难度也没大很多。
如果之后想使代码通用有如下方法:

  1. 第一种
    在代码开头写上如下代码
#define _CRT_SECURE_NO_WARNINGS
  1. 第二种
    右击我们创建的项目,点击属性,然后C/C++→预处理器定义后面打个; 之后黏贴上 _CRT_SECURE_NO_WARNINGS点击ok即可。此方法适用于整个项目。在该项目中,将不再需要添加相关宏定义。但是其他项目自然不受该设置的影响,因此,如有需要,在其他项目中需要再次进行相同的配置才能生效。
    在这里插入图片描述在这里插入图片描述
  2. 第三种
    找到菜单栏的项目,找到项目的属性,找到C/C++,找到代码生成,在代码生成中有个安全检查,将启用安全检查修改为禁用安全检查。这个方法也行。
    在这里插入图片描述
  3. 第四种方法
    进入vs的安装目录,找到一个newc++file.cpp文件在里面加入 _CRT_SECURE_NO_WARNINGS之后保存也行,大概目录就是,
    你设置的安装目录\Common7\IDE\VC\vcprojectitems
    可以用记事本编辑,但要以管理员身份打开;搜索记事本之后以管理员身份打开,编辑,保存即可。
    在这里插入图片描述
    也可以使用notepad++直接打开编辑保存即可。今天我下载的最新版本才3M多,很小,大家可以下了留的之后编辑其他代码。再之后你创建的所有项目开始就会有这一句话,你在这句话下边再正常编写你的代码就可以了。之后就不会再出现错误了。
    notepad++官网下载地址https://notepad-plus.en.softonic.com/
    好了,学习总结到此结束,欢迎留言交流,记得点赞鼓励哦。
;原文链接:https://blog.csdn.net/weixin_47792933/article/details/115582464
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐