scanf函数不安全: C4996 ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead

这篇具有很好参考价值的文章主要介绍了scanf函数不安全: C4996 ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

代码报错:
scanf函数不安全是什么意思,C语言,c语言

1. 为什么说 scanf 函数不安全

scanf函数易受缓冲区溢出攻击的影响,可能导致安全问题。
scanf_s函数是一种更安全的选择,它将缓冲区的大小作为参数并避免了缓冲区溢出攻击

举个栗子:
字符数组的大小为 5 , 若输入的字符串字符数目不超过 5 ,那么没问题,
(注意字符串后面默认会多出来一个 ‘\0’ )

scanf函数不安全是什么意思,C语言,c语言

如果超过 5 了, 就出现问题了, 程序崩了, 但是字符串能正常打印出来, 说明字符串放进去了,
由此可见, scanf 不管能不能放得下, 都会往内存里面放,这样就会导致数组越界, 非法访问其他的内存

scanf函数不安全是什么意思,C语言,c语言

2. 为什么不直接用 scanf_s

scanf_s 是 VS 编译器提供的函数, 并不是 C 语言提供的库函数
如果用 scanf_s , 那么写的代码在 非 VS 编译器上编译不能通过, 降低了代码的可移植性

3. 解决方法一:

代码的首行加上:

#define _CRT_SECURE_NO_WARNINGS 1

告诉编译器忽略相关的警告信息。消除编译时使用标准 C/C++ 函数(如 scanf、gets 等)时产生的安全警告

scanf函数不安全是什么意思,C语言,c语言

4. 解决方法二: 一劳永逸的方法

为了不每次创建文件时都要添加这一行代码, 我们可以设置每次创建文件时自动加上这行代码

步骤一: 找到 newc++file.cpp 文件

D: VS 的安装路径\Common7\IDE\VC\VCProjectItems

scanf函数不安全是什么意思,C语言,c语言

如果不容易找到的话, 这里推荐一款非常得力的 文件查找工具: Everything

Everything下载链接

步骤二: 更改文件

文件中添加:

#define _CRT_SECURE_NO_WARNINGS 1

注意: 直接更改并保存是没有权限的,
可以先将文件复制一份到其他位置, 更改后, 再拷贝过来将之前的文件替换掉即可

用记事本打开并添加:

scanf函数不安全是什么意思,C语言,c语言

这样以后每次新建文件都会自动出现这个东西啦

5. 解决方法三:

代码首部加上:

#pragma warning(disable:4996)

与方法一类似, 都是为了消除编译器产生的警告信息
只不过 4996 这个编译器警告编码是针对scanf的警告
scanf函数不安全是什么意思,C语言,c语言

好了,以上就是我为大家分享的三种方法, 推荐第二种, 希望能帮到你!
评论区欢迎指正!文章来源地址https://www.toymoban.com/news/detail-767869.html

到了这里,关于scanf函数不安全: C4996 ‘scanf‘: This function or variable may be unsafe. Consider using scanf_s instead的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包