错误C4996:' scanf':此函数或变量在c编程中可能不安全

时间:2015-06-01 15:34:19

标签: c windows visual-studio c11 tr24731

我创建了一个小应用程序,通过使用带参数的用户定义函数来查找最大数量。当我运行它时,它会显示此消息

  

错误1错误C4996:' scanf':此功能或变量可能不安全。   请考虑使用scanf_s。要禁用弃用,请使用   _CRT_SECURE_NO_WARNINGS。有关详细信息,请参阅在线帮助。

我该怎么做才能解决这个问题?

这是我的代码

#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);
}

4 个答案:

答案 0 :(得分:12)

听起来它只是一个编译器警告。

scanf_s的使用可防止可能的缓冲区溢出 请参阅:http://code.wikia.com/wiki/Scanf_s

关于为什么scanf可能有危险的好解释:Disadvantages of scanf

正如建议的那样,您可以尝试用scanf替换scanf_s或禁用编译器警告。

答案 1 :(得分:8)

另一种抑制错误的方法:在C / C ++文件的顶部添加此行:

#define _CRT_SECURE_NO_WARNINGS

答案 2 :(得分:0)

您可以在预处理器定义中添加“ _CRT_SECURE_NO_WARNINGS”。

右键单击您的项目->属性->配置属性-> C / C ++->预处理器->预处理器定义。

enter image description here

答案 3 :(得分:0)

另一种方法是,当您创建新项目时,不要点击安全开发生命周期 (SDL) 检查:

或者如果您在一个项目中: 右键单击您的 project->Properties->Configuration Properties->C/C++ ->All Options> 滚动鼠标并找到 SDL checks,将其编辑为 NO(/sdl-),然后应用,确定