Что делать с «небезопасными» функциями fopen и fscanf?
Если компилятор Microsoft Visual Studio выдаёт сообщение, что функции fopen и fscanf небезопасны (unsafe), можно сделать следующее.
- Если вы создавали пустой проект, можно вставить следующую директиву препроцессора:
#define _CRT_SECURE_NO_WARNINGS
Вставить её необходимо в самое начало файла, перед всеми директивами #include.
- Если вы создавали непустой проект, то придётся использовать новые функции – fopen_s и fscanf_s. Функция fscanf_s отличается от функции fscanf только тем, что при вводе строки первая функция требует указания размера памяти, выделенной для строки. При вводе данных других типов функции ничем не отличаются, так что можно просто заменить имя fscanf на fscanf_s.
В отличие от функций ввода функции открытия файла fopen и fopen_s имеют различный синтаксис, поэтому строку
if ((file = fopen(fname, "r")) == NULL)
придётся заменить на следующие две строки
fopen_s(&file, fname, "r");
if (file == NULL)
- Если заменять функции совсем не хочется, то можно отключить отслеживаение устаревших функций в свойствах проекта. Но необходимо помнить, что сообщения компилятора являются важным инстументом отладки, и злоупотреблять этим способом нельзя. В норме необходимо корректировать программу так, чтобы компилятор не выдавал даже предупреждения, а отключать их можно только в крайнем случае. Для отключения нужно выбрать пункт меню Проект – Свойства, в появившемся диалоге раскрыть элемент C/C++, выбрать Дополнительно и отредактировать пункт Отключить указанные предупреждения. При этом появится новый диалог, в котором нужно ввести 4996 (номер отключаемого предупреждения), и сохранить изменения.