Подтвердить что ты не робот

Как использовать _CRT_SECURE_NO_WARNINGS

У меня есть ошибка компиляции в моем простом оконном приложении MFC, сгенерированном из мастера с несколькими строками кода:

ошибка C4996: 'strncpy': эта функция или переменная может быть небезопасной. Вместо этого рассмотрите использование strncpy_s. Чтобы отключить устаревание, используйте _CRT_SECURE_NO_WARNINGS. Подробнее см. Интерактивную справку.

Я установил Configuration Properties>>C/C++>>Preporocessor>>Preprocessor Definitions>> _CRT_NONSTDC_NO_WARNINGS

Но это не помогло. У меня есть еще один очень близкий проект, который генерирует только предупреждение в этом месте и не имеет определения _CRT_NONSTDC_NO_WARNINGS.

Только разница между проектами - это несколько разных параметров в мастере.

Почему _CRT_NONSTDC_NO_WARNINGS не помогает в первом проекте и почему второй проект компилируется без проблем без этого определения?

4b9b3361

Ответ 1

Добавить по

Свойства конфигурации >> C/C++ >> Препроцессор >> Определения препроцессора >> _CRT_SECURE_NO_WARNINGS

screenshot of the relevant config interface

Ответ 2

В разделе "Проект → Свойства → C/С++ → Препроцессор → Определения препроцессора" добавить _CRT_SECURE_NO_WARNINGS

Ответ 3

Если вы находитесь в Visual Studio 2012 или позже, у него есть дополнительный параметр "Проверки SDL" в разделе "Свойства" → C/С++ → Общие

Рекомендуемые проверки жизненного цикла дополнительной безопасности (SDL); включает возможность включения дополнительных функций генерации защищенного кода и дополнительных предупреждений, связанных с безопасностью, в качестве ошибок.

По умолчанию используется значение YES. По какой-то причине I.E вы должны использовать защищенную версию strncpy. Если вы измените это на НЕТ, вы не получите ошибку при использовании небезопасной версии.

SDL проверяет vs2012 и более поздние версии

Ответ 4

Добавление _CRT_SECURE_NO_WARNINGS в Project → Properties → C/C++ → Preprocessor → Preprocessor Definitions у меня не сработало, не знаю почему.

Следующая подсказка работает: в файле stdafx.h, пожалуйста, добавьте

#define _CRT_SECURE_NO_DEPRECATE

перед включением других заголовочных файлов.

Ответ 5

Для быстрого исправления или проверки я нахожу удобным просто добавить #define _CRT_SECURE_NO_WARNINGS в верхнюю часть файла перед всеми #include

#define _CRT_SECURE_NO_WARNINGS
#include ...
int main(){
    //...
}

Ответ 6

Если вы находитесь в Visual Studio 2012 или позже, у него есть дополнительный параметр "Проверки SDL" в разделе "Свойства" → C/С++ → Общие - это правильный ответ, он работает для меня.