Ошибка программы: This function or variable may be unsafe - C (СИ)
Формулировка задачи:
Ошибка 1 error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. *путь*
что она означает?
Решение задачи: «Ошибка программы: This function or variable may be unsafe»
textual
Листинг программы
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
void build(int*, int);
void heap(int*, int);
int main(void)
{
FILE *fin;
int *a, n, i;
fin = fopen("input.txt", "r");
fscanf(fin, "%d", &n);
a = (int*)malloc(n*sizeof(int));
for (i = 0; i<n; i++)
fscanf(fin, "%d", &a[i]);
printf("pervona4alniy vid\n");
for (i = 0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
build(a, n);
printf("\n postroenie\n");
for (i = 0; i<n; i++)
printf("%d ", a[i]);
heap(a, n);
printf("\n kone4niy vid\n");
for (i = 0; i<n; i++)
printf("%d ", a[i]);
printf("\n");
return 0;
}
/* ------------ */
void build(int *a, int n)
{
int i, j, k, temp;
for (i = 0; i<n / 2; i++)
{
j = 2 * i + 1;
k = i;
if ((a[j + 1]>a[j]) && (j + 1<n)) j++;
while ((j>0) && (a[j]>a[k]))
{
temp = a[j];
a[j] = a[k];
a[k] = temp;
j = k;
k = (k - 1) / 2;
}
}
}
/* -------------*/
void heap(int *a, int n)
{
int nn, temp, i;
nn = n;
while (nn>0)
{
temp = a[0];
a[0] = a[nn - 1];
a[nn - 1] = temp;
nn--;
build(a, nn);
for (i = 0; i<n; i++) printf("%d ", a[i]);
}
}
Объяснение кода листинга программы
- В начале программы открывается файл
input.txtдля чтения. - С помощью функции fscanf считывается количество элементов из файла и сохраняется в переменной n.
- Выделяется память под массив a размером n*sizeof(int).
- С помощью цикла for и функции fscanf считываются значения элементов массива a из файла.
- Выводится первый вариант массива a.
- Вызывается функция build для сортировки массива a.
- Выводится второй вариант массива a после сортировки.
- Вызывается функция heap для преобразования массива a в кучу.
- Выводится третий вариант массива a после преобразования в кучу.
- Программа возвращает 0, заканчивая свою работу.
- В функции build происходит сортировка массива a по методу выбором.
- В функции heap происходит преобразование массива a в кучу.
- Переменная nn используется для отслеживания размера массива a в функции heap.
- В цикле while в функции heap происходит перемещение последнего элемента массива a в начало и вызов функции build для рекурсивной сортировки уменьшенного массива.
- Во время выполнения цикла while в функции heap выводится текущий вариант массива a.
- После выхода из цикла while в функции heap, программа продолжает работу с основного цикла.
- В цикле for в основной программе выводятся значения элементов массива a.
- Для организации рекурсивной сортировки в функции build используется временная переменная temp.
- Для организации рекурсивного преобразования в кучу в функции heap используется временная переменная temp.
- Переменная i используется в цикле for в основной программе и в функциях build и heap для отслеживания индексов элементов массива a.