Ошибки библиотеки cstring в MSVC (This function or variable may be unsafe)

"This function or variable may be unsafe. Consider using str***_s instead."

В один прекрасный момент разработчики Microsoft решили, что использование функций strcpy, strcat и прочих str*** небезопасно и может повлечь за собой опасные последствия вроде различного рода уязвимостей, некорректной работы с памятью и т.п. Чтобы разрешить эту проблему, ими были предложены альтернативы одноименным функциям с суффиксом `_s`, которые обзавелись дополнительными параметрами или изменили оригинальную сигнатуру. До недавнего момента их всего лишь рекомендовалось использовать, однако, судя по всему, это прекрасное время закончилось, и в современных версиях Visual Studio вместо обычного предупреждение может выдаваться ошибка компиляции.

Способы подавления предупреждения про использование устаревших функций:

  1. Использование макроса `_CRT_SECURE_NO_WARNINGS`. Определять этот макрос (т.е. писать директиву `#define _CRT_SECURE_NO_WARNINGS`) следует перед всеми включениями заголовочных файлов, т.е. в первых строчках файла.
  2. Явно указать компилятору игнорировать конкретный тип предупреждений при помощи директивы #pragma: `#pragma warning(disable:4996)`. Добавить данную строчку необходимо перед включением заголовочного файла <cstring>.
  3. В свойствах проекта определить макрос `_CRT_SECURE_NO_WARNINGS`. Если это сделать, то отпадет необходимость использовать #define с данным макросам во всех файлах, где это предупреждение могло появиться. `Project` -> `Properties` -> `Вкладка C++` -> `Preprocessor` -> `Preprocessor Definitions` -> `Добавить _CRT_SECURE_NO_WARNINGS в поле справа`.

Последнее изменение: Monday, 16 April 2018, 09:05