БлогNot. Visual C++: используем _CRT_SECURE_NO_WARNINGS для совместимости с классическими...

Помощь дата->рейтинг Поиск Почта RSS канал Статистика nickolay.info Домой

Visual C++: используем _CRT_SECURE_NO_WARNINGS для совместимости с классическими функциями

Часто жалуются на "неработающие" коды, особенно консольных приложений или CLR, особенно тех, что работали без каких-либо замечаний в версиях 2010-2013 и вдруг "не работают" в 2015, например, вот этот код.

Выдаются ошибки типа

Ошибка C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

Можете, как и рекомендует компилятор, заменить старые названия функций на их безопасные версии, скажем, strcpy на strcpy_s и fopen на fopen_s.

Правда, в последнем случае изменится и "классический" оператор открытия файла, скажем, с

FILE *out = fopen_s("data.txt", "wt");

на

FILE *out; fopen_s(&out,"data.txt", "wt");

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

Есть путь ещё проще - напишите

#define _CRT_SECURE_NO_WARNINGS

в самом начале до всех #include.

Если используется предкомпиляция, то можно определить этот макрос в заголовочном файле stdafx.h.

Можно также попробовать "дорисовать" его не в заголовках, а в настройках проекта.

Управление предкомпилированными заголовками находится вот где: меню Проект - Свойства C/C++ - Препроцессор (Preprocessor) - Определения препроцессора (Preprocessor Definitions).

Проверено на пустом проекте C++ Visual Studio 2015, сработало.


теги: памятка безопасность c++ ошибка studio

13.10.2015, 11:48; рейтинг: 18480

  свежие записипоиск по блогукомментариистатистика

Наверх Яндекс.Метрика
© PerS
вход