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位。

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

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

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

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

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