Ошибка C4996: 'scanf': эта функция или переменная могут быть небезопасны в программировании на c

Я создал небольшое приложение, чтобы найти максимальное число с помощью пользовательской функции с параметром. Когда я запускаю его, он показывает это сообщение

Ошибка 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);
}

8 ответов

Решение

Похоже, это просто предупреждение компилятора.

Использование scanf_s предотвращает возможное переполнение буфера.
Смотрите: http://code.wikia.com/wiki/Scanf_s

Хорошее объяснение почему scanf может быть опасно: недостатки 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-), затем Применить, ОК

Чтобы отключить предупреждение компилятора, добавьте в самый верх вашей программы следующий оператор: #define _CRT_SECURE_NO_WARNINGS

Вместо того, чтобы использовать scanf, попробуй использовать scanf_s

Это будет работать...

Простой ответ: функция scanf() считывает символ / строку от первого символа до первого пробела.

#define scanf scan_f

заменить небезопасную версию на безопасную.

Другие вопросы по тегам