在使用scanf()函数时编译器报错C4996

在使用scanf()函数时编译器报错C4996
使用scanf()函数的程序在用visual studio 2019/2022编译运行时会出现以下报错

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.

这是因为visual studio中的MSVC编译器认为scanf()函数在读取输入时不进行边界检查,可能存在读入超出内存限制的字符,造成内存访问越界,从而引发内存泄漏,留下安全隐患,微软建议使用scanf_s()函数设置读入大小,防止读入超出边界的内容。

但,scanf()函数在众多C语言教材中都广泛存在,在学习的过程中可以使用以下方法解决这个问题

  1. 使用scanf_s()直接替代scanf()
  2. 使用警告杂注在当前文档中禁用C4996警告
    • 将以下代码作为预处理器指令放在文档的第一个非空白区间(如图)
      #pragma warning(disable : 4996)

在使用scanf()函数时编译器报错C4996

3.在 Visual Studio 中关闭项目的警告
若要在 Visual Studio IDE 中关闭整个项目的警告:

打开项目的 " 属性页 " 对话框。 有关如何使用 "属性页" 对话框的信息,请参阅 属性页。

选择 "配置属性" " > c/c + + > 高级" 属性页。

编辑 " 禁用特定警告 " 属性以添加 4996 。 选择 "确定" 以应用所做的更改。

推荐使用第二种方法

原创文章,作者:kai233,如若转载,请注明出处:https://www.sorkai.com/archives/121

(3)
上一篇 2021年9月23日 上午6:58
下一篇 2021年10月6日 下午7:19

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注