0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 7
1

Исправить ошибку C4996

23.10.2016, 13:30. Показов 16930. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Выдаёт ошибку на "fopen", когда меняю её на "fopen_s" выдаёт кучу ошибок в этой строке. Помогите пожалуйста, я в этой сфере новичок, первый курс)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <iostream>
#define use_CRT_SECURE_NO_WARNIGNS
int ReadN()
{
    FILE *f; //объявление переменной –указателя на файл
    int n = 0;
    f = fopen("C:\\Input.txt", "rt"); //Открытие файла f для чтения
    fscanf(f, "%d", &n); //Чтение числа n из файла
    fclose(f); //Закрытие файла
    return n;
}
void InputArray(int arr[])
{
    int n = 0;
    FILE *f;
    f = fopen("C:\\Input.txt", "rt");
    fscanf(f, "%d", &n);
    for (int i = 0; i < n; i++)
    {
        fscanf(f, "%d", &arr[i]);
        if (arr[i] % 2 == 0)
            arr[i] *= -1;
    }
    fclose(f);
}
void OutputArray(int arr[], int n)
{
    FILE *f; //объявление переменной –указателя на файл
    f = fopen("C:\\Output.txt", "wt");
    for (int i = 0; i < n; i++)
    {
        fprintf(f, "%5d", arr[i]); //Запись числа n в файл
    }
    fclose(f); //Закрытие файла
}
void main()
{
    int *a; //указатель на массив
    int n = ReadN(); //количество элементов массива
    a = (int*)malloc(n * sizeof(int)); //Выделение памяти под массив
    InputArray(a);
    OutputArray(a, n);
    free(a);
    system("PAUSE");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.10.2016, 13:30
Ответы с готовыми решениями:

Исправить ошибку "C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead."
Добрый день! Помогите пожалуйста с программой. Программа запускается, но при компиляции выдает...

Выдаёт ошибку c4996
#include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Код говорит ошибку C4996, в чём проблема?
#include &lt;iostream&gt; #include &lt;Windows.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; using namespace...

Компилятор выдаёт ошибку error C4996: 'strcpy': This function or variable may be unsafe
Добрый день! Помогите , пожалуйста, узнать в чём проблема. Код взят из книги. Мне он не очень...

3
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
23.10.2016, 13:49 2
вместо
C++
1
#define use_CRT_SECURE_NO_WARNIGNS
напишите
C++
1
#pragma warning(disable : 4996)
0
Модератор
Эксперт С++
13492 / 10748 / 6405
Регистрация: 18.12.2011
Сообщений: 28,681
23.10.2016, 13:56 3
Цитата Сообщение от Impulse703 Посмотреть сообщение
#define use_CRT_SECURE_NO_WARNIGNS
C++
1
#define _CRT_SECURE_NO_WARNIGNS
0
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
23.10.2016, 13:59 4
Цитата Сообщение от Impulse703 Посмотреть сообщение
на "fopen"
warning 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.
это - предупреждение, а не ошибка.
компилятор предупредил:
вы используйте не безопасные версии функций.

пример:

запускаю на онлайн компиляторе:
http://rextester.com/KCKWZ85370


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// приглушил предупреждение компилятора
#define _CRT_SECURE_NO_WARNINGS
 
#include <stdio.h>
#include <iostream>
 
int ReadN()
{
    FILE *f; //объявление переменной –указателя на файл
    int n = 0;
    f = fopen("C:\\Input.txt", "rt"); //Открытие файла f для чтения
    fscanf(f, "%d", &n); //Чтение числа n из файла
    fclose(f); //Закрытие файла
    return n;
}
void InputArray(int arr[])
{
    int n = 0;
    FILE *f;
    f = fopen("C:\\Input.txt", "rt");
    fscanf(f, "%d", &n);
    for (int i = 0; i < n; i++)
    {
        fscanf(f, "%d", &arr[i]);
        if (arr[i] % 2 == 0)
            arr[i] *= -1;
    }
    fclose(f);
}
void OutputArray(int arr[], int n)
{
    FILE *f; //объявление переменной –указателя на файл
    f = fopen("C:\\Output.txt", "wt");
    for (int i = 0; i < n; i++)
    {
        fprintf(f, "%5d", arr[i]); //Запись числа n в файл
    }
    fclose(f); //Закрытие файла
}
void main()
{
    int *a; //указатель на массив
    int n = ReadN(); //количество элементов массива
    a = (int*)malloc(n * sizeof(int)); //Выделение памяти под массив
    InputArray(a);
    OutputArray(a, n);
    free(a);
    system("PAUSE");
}
Error(s):
Process exit code is not 0: -1073740791
что произошло?
на онлайн компиляторе нет никаких "C:\\Input.txt" и тп.
но у вас в коде нет нигде никаких проверок:
смогли открыть, не смогли.

рассмотрим функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int ReadN()
{
    FILE *f; //объявление переменной –указателя на файл
    int n = 0;
    f = fopen("C:\\Input.txt", "rt"); // <--- не смогли открыть
 
    fscanf(f, "%d", &n); // <--- у нас файл не открылся
      // а небезопасной функции пофигу
      // что указатель f - вообще не валиден
 
    fclose(f); //Закрытие файла
    return n;
}
дальше происходит попытка чтения по невалидному адресу,
срабатывает дебаг-защита памяти рантайма с++,
или же операционная система решает:
"процесс взбесился. нужно его грохнуть от греха подальше",
и посылает процессу живительный сигнал эвтаназии.
3
23.10.2016, 13:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2016, 13:59
Помогаю со студенческими работами здесь

Выдает ошибку: error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead
Уважаемые форумчане! У меня не работает программа. Все написано &quot;вроде&quot; правильно. Выдает ошибку:...

Подскажите как исправить ошибку. прога ломается на 79 строке. а ошибку не выдает
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int chisla(int...

Как исправить ошибку: формат теста исправить нельзя, только текст программы
class AmericanDate: def __init__(self, y, m, d): self.get_year = str(y) ...

В коде выдает ошибку на 15 строчке. Мне надо исправить эту ошибку
procedure TForm1.BOkClick(Sender: TObject); var e1, e2: double; begin Label1.Caption := '';...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru