_CRT_SECURE_NO_WARNINGS 实际上是什么意思?

Mic*_*zov 8 c warnings visual-studio

由于使用该函数,我在 Visual Studio 中收到此 C4996 错误scanf()

事实证明,这个问题的解决方案是将这一行添加_CRT_SECURE_NO_WARNINGS到配置属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> 编辑。

它完美地解决了问题,但我找不到这个东西的实际含义的正确解释。如果它禁用警告,为什么我的程序首先崩溃了?什么是“CRT”?

崩溃程序的示例:

#include <stdio.h>
main()
{
    int number;
    printf("enter a number\n");
    scanf("%d", &number);
}
Run Code Online (Sandbox Code Playgroud)

以及错误消息: _CRT_SECURE_NO_WARNINGS 错误消息

Adi*_*tya 4

CRT 是 Windows 中的 C 运行时库,它为您提供类似的功能,在 Linux 上它由GNU LibC (GLibc)scanf完成。

正如@jamieguinan指出的那样, scanf 存在一些安全缺陷,例如缓冲区溢出,其中用户提供的输入可能大于缓冲区的大小,导致其覆盖其他内存。

这就是 Visual Studio 警告您使用scanf_s更安全版本的scanf.

您可以将此预处理器定义放入代码中以禁用此警告:

#define _CRT_SECURE_NO_WARNINGS
Run Code Online (Sandbox Code Playgroud)

不过,如果您真的知道自己在做什么,则没有必要。