22

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

错误 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

6 回答 6

17

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

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

scanf关于为什么会很危险的很好的解释: scanf 的缺点

因此,按照建议,您可以尝试替换scanfscanf_s禁用编译器警告。

于 2015-06-01T15:49:14.203 回答
16

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

#define _CRT_SECURE_NO_WARNINGS
于 2018-04-17T08:36:17.977 回答
13

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

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

在此处输入图像描述

于 2019-11-09T11:41:16.570 回答
1

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

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

于 2021-06-23T02:22:40.693 回答
0

#define scanf scan_f

用保险箱替换不安全的版本。

于 2022-01-25T13:57:35.350 回答
0

简单的答案是:该scanf()函数从第一个字符开始读取字符/字符串到第一个空格。

于 2021-11-05T12:42:38.817 回答