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即可。