it-roy-ru.com

Как использовать _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 не помогает в первом проекте и почему второй проект компилируется без проблем без этого определения?

37
vico

Добавить по

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

screenshot of the relevant config interface

38
Balu

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

78
nexusclarum

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

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

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

SDL проверяет vs2012 и позже

22
kmcnamee

Добавление _CRT_SECURE_NO_WARNINGS в Проект -> Свойства -> C/C++ -> Препроцессор -> Определения препроцессора у меня не сработало, не знаю почему. 

Следующая подсказка работает: В файле stdafx.h добавьте «#define_CRT_SECURE_NO_DEPRECATE», прежде чем включать другие заголовочные файлы.

0
user2703790