C4996使用VS2019时出现scanf要改用scanf_s的处理方法

 

在使用VS2019编译C程序时,出现了要求将scanf替换为scanf_s的错误警告,

scanf_s() 是针对“ scanf()在读取字符串时不检查边界,可能会造成内存泄露”这个问题设计的。
scanf_s()用于读取字符串时,必须提供一个数字以表明最多读取多少位字符,以防止溢出。这也导致了我在直接将scanf()改为scanf_s()时,那里恰好是一个字符串,于是在输入过程又出现了异常

“0x0FD4D543 (ucrtbased.dll)处(位于 ConsoleApplication1.exe 中)引发的异常: 0xC0000005: 写入位置 0x011C2000 时发生访问冲突”。 

解决方案一

  • 我们可以直接改为使用scanf_s();

        前提是要提供边界,下面的一段代码即最多读到11位。

        测试后可行,不再出现异常

解决方案二

  • 也可以使用网上很多的一劳永逸的通用解决办法,就是直接让它不报这个错误。

        解决办法:打开“项目”——“ConsoleApplication1属性”,在VC++的预处理器定义部分添加_CRT_SECURE_NO_DEPRECATE即可。

  • 23
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值