解决VS2013出现scanf函数不安全的问题

解决VS2013出现scanf函数不安全的问题

错误 1 error 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.
 

相信很多人在用vs编写程序的时候都会遇到我发的这种问题,我在学习C语言的时候老师明确的告诉我说取值的语句就是scanf语句,为什么我现在写出来它报错了,这么简单的语句我肯定不会写错,那到底是哪出了问题呢?它为什么会提示我让我写scanf_s呢?

先来说一下scanfscanf_s的区别

scanf()函数是标准C中提供的标准输入函数,用以用户输入数据

scanf_s()函数是Microsoft公司VS开发工具提供的一个功能相同的安全标准输入函数,从vc++2005开始,VS系统提供了scanf_s()。在调用该函数时,必须提供一个数字以表明最多读取多少位字符。

scanf()在读取数据时不检查边界,所以可能会造成内存访问越界:
 

//例如:分配了5字节的空间但是用户输入了10字节,就会导致scanf()读到10个字节

char buf[5]={'\0'};

scanf("%s", buf);

//如果输入1234567890,则5以后的部分会被写到别的变量所在的空间上去,从而可能会导致程序运行异常。

以上代码如果用scanf_s()则可避免此问题:

char buf[5]={'\0'};

scanf_s("%s",buf,5); //最多读取4个字符,因为buf[4]要放'\0' 

//如果输入1234567890,则buf只会接受前4个字符

接下来是两种解决办法:

第一种办法:

扫描二维码关注公众号,回复: 10506492 查看本文章

点开vs上边的项目,然后看最下边有一个你的项目的属性

点属性你就会出来这个项目的属性页

进去找配置属性----C/C++-----代码生成,找到其中一个安全检查的选项,你发现后边的选项中是启用安全检查,这时候你点一下后边

将后边的安全检查改成禁用这时候你再去运行的你代码。

这时候虽然下边会有警告,但是完全不影响你代码的运行了已经。

第一个的方法,虽然每个程序只用更改一次,但是当你关了这个项目再开另一个项目的时候你会发现,它的安全检查又开了,所以你需要再更改一次,第二种方法我给大家介绍一个一次性操作的方法。

第二种方法:

   这时候你看你最初的时候提出的错误

1 error 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. 

_CRT_SECURE_NO_WARNINGS 你会发现有一个这个东西。那咱们就用这个东西来改变现在的问题。
 

找到你的VS安装目录

VC-vcprojectitems-newc++file

然后把他用Notepad++打开,如果用其他的应用打开的话,例如vs、记事本等等打开之后是不能将他更改的,用notepad++打开之后 #define _CRT_SECURE_NO_WARNINGS 1在文档中加入一句这个话,然后保存,有的电脑会要求你使用管理者权限,这时候你通过就可以。
 

#define _CRT_SECURE_NO_WARNINGS 1

再之后你创建的所有项目开始就会有这一句话,你在这句话下边再正常编写你的代码就可以了。之后就不会再出现错误了。

仅供参考

发布了54 篇原创文章 · 获赞 28 · 访问量 7277

猜你喜欢

转载自blog.csdn.net/jiangkun0331/article/details/104976803