error C4996: 'scanf': 此函数或变量在 c 编程中可能不安全
error C4996: 'scanf': This function or variable may be unsafe in c programming
我创建了一个小应用程序,通过使用带参数的用户定义函数来查找最大数。当我 运行 它时,它显示此消息
Error 1 error 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.
我该怎么做才能解决这个问题?
这是我的代码
#include<stdio.h>
void findtwonumber(void);
void findthreenumber(void);
int main() {
int n;
printf("Fine Maximum of two number\n");
printf("Fine Maximum of three number\n");
printf("Choose one:");
scanf("%d", &n);
if (n == 1)
{
findtwonumber();
}
else if (n == 2)
{
findthreenumber();
}
return 0;
}
void findtwonumber(void)
{
int a, b, max;
printf("Enter a:");
scanf("%d", &a);
printf("Enter b:");
scanf("%d", &b);
if (a>b)
max = a;
else
max = b;
printf("The max is=%d", max);
}
void findthreenumber(void)
{
int a, b, c, max;
printf("Enter a:");
scanf("%d", &a);
printf("Enter b:");
scanf("%d", &b);
printf("Enter c:");
scanf("%d", &c);
if (a>b)
max = a;
else if (b>c)
max = b;
else if (c>a)
max = c;
printf("The max is=%d", max);
}
听起来这只是一个编译器警告。
使用 scanf_s
可防止可能的缓冲区溢出。
参见:http://code.wikia.com/wiki/Scanf_s
很好地解释了为什么 scanf
可能很危险:Disadvantages of scanf
因此,按照建议,您可以尝试将 scanf
替换为 scanf_s
或禁用编译器警告。
抑制错误的另一种方法:在 C/C++ 文件的顶部添加此行:
#define _CRT_SECURE_NO_WARNINGS
您可以在预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”。
右键单击您的项目->属性->配置属性->C/C++ ->预处理器->预处理器定义。
另一种方式是当您创建一个新项目时,您没有点击安全开发生命周期 (SDL) 检查:
或者如果你在一个项目中:
右击你的project->Properties->Configuration Properties->C/C++ ->All Options>
滚动你的鼠标找到SDL checks
,你把它编辑成NO(/sdl-)
,然后应用,OK
简单的答案是:scanf()
函数读取 char/string 从第一个字符到第一个空格。
#define scanf scan_f
用安全的版本替换不安全的版本。
要禁用编译器警告,请在程序的最顶部添加以下语句:#define _CRT_SECURE_NO_WARNINGS
我创建了一个小应用程序,通过使用带参数的用户定义函数来查找最大数。当我 运行 它时,它显示此消息
Error 1 error 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.
我该怎么做才能解决这个问题?
这是我的代码
#include<stdio.h>
void findtwonumber(void);
void findthreenumber(void);
int main() {
int n;
printf("Fine Maximum of two number\n");
printf("Fine Maximum of three number\n");
printf("Choose one:");
scanf("%d", &n);
if (n == 1)
{
findtwonumber();
}
else if (n == 2)
{
findthreenumber();
}
return 0;
}
void findtwonumber(void)
{
int a, b, max;
printf("Enter a:");
scanf("%d", &a);
printf("Enter b:");
scanf("%d", &b);
if (a>b)
max = a;
else
max = b;
printf("The max is=%d", max);
}
void findthreenumber(void)
{
int a, b, c, max;
printf("Enter a:");
scanf("%d", &a);
printf("Enter b:");
scanf("%d", &b);
printf("Enter c:");
scanf("%d", &c);
if (a>b)
max = a;
else if (b>c)
max = b;
else if (c>a)
max = c;
printf("The max is=%d", max);
}
听起来这只是一个编译器警告。
使用 scanf_s
可防止可能的缓冲区溢出。
参见:http://code.wikia.com/wiki/Scanf_s
很好地解释了为什么 scanf
可能很危险:Disadvantages of scanf
因此,按照建议,您可以尝试将 scanf
替换为 scanf_s
或禁用编译器警告。
抑制错误的另一种方法:在 C/C++ 文件的顶部添加此行:
#define _CRT_SECURE_NO_WARNINGS
您可以在预处理器定义中添加“_CRT_SECURE_NO_WARNINGS”。
右键单击您的项目->属性->配置属性->C/C++ ->预处理器->预处理器定义。
另一种方式是当您创建一个新项目时,您没有点击安全开发生命周期 (SDL) 检查:
或者如果你在一个项目中:
右击你的project->Properties->Configuration Properties->C/C++ ->All Options>
滚动你的鼠标找到SDL checks
,你把它编辑成NO(/sdl-)
,然后应用,OK
简单的答案是:scanf()
函数读取 char/string 从第一个字符到第一个空格。
#define scanf scan_f
用安全的版本替换不安全的版本。
要禁用编译器警告,请在程序的最顶部添加以下语句:#define _CRT_SECURE_NO_WARNINGS