我在使用scanf()
函数时,在 Visual Studio 中一直遇到 C4996 错误。
解决这个问题的方法是在“配置属性”->“C/C++”->“预处理器”->“预处理器定义”->“编辑”中添加 _CRT_SECURE_NO_WARNINGS
这一行。
这完美地解决了问题,但我找不到对这个东西实际意义的适当解释。如果它禁用了警告,那么我的程序为什么会崩溃呢?什么是“CRT”?
以下是一个崩溃程序的示例:
#include <stdio.h>
main()
{
int number;
printf("enter a number\n");
scanf("%d", &number);
}
scanf_s
等,以便更安全地使用。但是它们同样难以使用,并且它们不是直接替换(它们的参数不同),因此可以说它们并不更安全。而且它们是非标准的。该定义抑制了编译器的“警告”。 - Weather Vanescanf
不同,scanf_s
对于所有类型为 c、C、s、S 或包含在 [] 中的字符串控制集的输入参数都需要指定缓冲区大小。字符缓冲区大小作为一个附加参数紧跟在指针或变量后面传递。"* 缓冲区大小不在格式化字符串中。 - Weather Vane