Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Анела Китано
0 / 0 / 0
Регистрация: 21.05.2017
Сообщений: 8
1

Считать файл в динамический массив

21.05.2017, 22:03. Просмотров 320. Ответов 15
Метки нет (Все метки)

Считай, ничего сложного. Все должно работать, но после первого же прогона крашится экзешник, повторно не запускается. Считываю файл, сгенерированый ранее при записи звука в другой проге. Считывать нужно именно в динамический массив, так как этот код далее будет пользоваться для создания библиотеки.
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
#include "windows.h"
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
 
int main()
{
    FILE *f; int i = 0, j = 0; int len = 1000;
    f = fopen("rand.txt", "r+");
    if (f == NULL) printf("Error\n");
    unsigned char *mas = (unsigned char*)malloc(len);
    while (!feof(f))
    {
        for (int i = 0; i < len; i++)
            fread(&mas[i], sizeof(char), 1, f);
    }
    for (i = 0; i < len; i++)
    {
        printf("%d\n", mas[i]);
    }
    /*  rewind(f);    //перематываем файл для повторного чтения
    for (i = 0; i<k; i++)
    {
    fscanf(f, "%d", &mas[i]);
    printf("c[%d]=%d  ", i, mas[i]);
    }*/
    fclose(f);
    free(mas); //убираем мусор
    getchar();  //задержка консоли
    return 0;
}
Файл, который нужно открыть, прилагаю. rand.txt
В чем может быть проблема?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2017, 22:03
Ответы с готовыми решениями:

Файл: Считать все числа из файлав динамический массив
&quot;Считать все числа из файла(количество чисел в файле - произвольное) в...

Считать строку в динамический массив
помогите считать строку цифр неизвестной длины и перевести в массив целых чисел...

Считать матрицу в динамический массив
Есть функция для статического массива, как ее переделать в динамический? в...

Считать квадратную матрицу в динамический массив.
нужно просто считать квадратную матрицу в динамический массив. Вот реализация...

Не могу считать матрицу из файла в динамический массив
Вот проблемный кусок программы: fstream f (strConst); if (! f) {...

15
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
21.05.2017, 22:19 2
Размер файла учитываешь при выделении памяти, если читаешь до конца файла? Если читаешь бинарными методами, то и открывать файл нужно в бинарном режиме. while() и for() внутри - непонятно о чём.
0
Анела Китано
0 / 0 / 0
Регистрация: 21.05.2017
Сообщений: 8
21.05.2017, 22:32  [ТС] 3
Без while происходит то же самое.
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
21.05.2017, 22:35 4
Цитата Сообщение от Анела Китано Посмотреть сообщение
Без while происходит то же самое.
Ясный день, если непонятно о чём...
C++
1
2
3
4
5
6
7
8
9
10
11
    ifstream f("rand.txt", ios::binary);
    if (!f) 
        cout << "Error\n";
    else
    {
        f.seekg(0, ios::end); 
        size_t len = f.tellg();
        f.seekg(0, ios::beg);
        unsigned char *mas = new unsigned char[len];
        f.read((char*)mas, len);
    }
0
Анела Китано
0 / 0 / 0
Регистрация: 21.05.2017
Сообщений: 8
21.05.2017, 22:42  [ТС] 5
Оно считывает и записывает в массив адекватно, выдает нужный результат. Проблема именно в том, что при повторном запуске выдает ошибку о невозможности открыть exe файл
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
21.05.2017, 22:47 6
Цитата Сообщение от Анела Китано Посмотреть сообщение
Оно считывает и записывает в массив адекватно
Что там может быть адекватно? На каждой итерации while записываешь в массив по 1000 байт, затирая при этом существующие (считанные на предыдущей итерации) данные. Это адекватно называется?
0
Анела Китано
0 / 0 / 0
Регистрация: 21.05.2017
Сообщений: 8
21.05.2017, 22:51  [ТС] 7
Без while на экран выводится тот же самый результат. Уже исправила это, но, это не решает проблемы краша экзешника
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
21.05.2017, 22:56 8
Цитата Сообщение от Анела Китано Посмотреть сообщение
Без while на экран выводится тот же самый результат.
Тот же самый - это какой? Содержимое всего файла, или что-то другое?
Цитата Сообщение от Анела Китано Посмотреть сообщение
Уже исправила это,
Код покажи.
0
Анела Китано
0 / 0 / 0
Регистрация: 21.05.2017
Сообщений: 8
21.05.2017, 23:02  [ТС] 9
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
#include "windows.h"
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
 
int main()
{
    FILE *f; int i = 0, j = 0; int len = 1000;
    f = fopen("rand.txt", "r");
    if (f == NULL) 
        printf("Error\n");
    unsigned char *mas = (unsigned char*)malloc(len);
 
    for (int i = 0; i < len; i++)
        fread(&mas[i], sizeof(char), 1, f);
 
    for (i = 0; i < len; i++)
    {
        printf("%d - %d\n", i, mas[i]);
 
    }
    fclose(f);
    free(mas); //убираем мусор
    getchar();  //задержка консоли
    return 0;
}
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
21.05.2017, 23:05 10
То есть, этот код выполняет вот это?
Цитата Сообщение от Анела Китано Посмотреть сообщение
Считать файл в динамический массив
0
Анела Китано
0 / 0 / 0
Регистрация: 21.05.2017
Сообщений: 8
21.05.2017, 23:09  [ТС] 11
Один раз, на следующий запуск - краш
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
21.05.2017, 23:19 12
Цитата Сообщение от Анела Китано Посмотреть сообщение
Один раз
У тебя читается 1000 байт (на самом деле меньше, потому что поток ломается из-за того, что файл открыт в текстовом режиме). Весь файл это 16036 байт.
0
Анела Китано
0 / 0 / 0
Регистрация: 21.05.2017
Сообщений: 8
21.05.2017, 23:41  [ТС] 13
Мне и не нужно весь файл, только заданное значение, этот процесс нужен будет для создания библиотеки
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
21.05.2017, 23:46 14
Цитата Сообщение от Анела Китано Посмотреть сообщение
Мне и не нужно весь файл, только заданное значение
Зачем тогда это писать?
Цитата Сообщение от Анела Китано Посмотреть сообщение
Считать файл в динамический массив
0
Анела Китано
0 / 0 / 0
Регистрация: 21.05.2017
Сообщений: 8
21.05.2017, 23:53  [ТС] 15
Ну, под файлом же понимается последовательность байт, в любом случае. Проблема совсем не в том, нужно считать всю последовательность или нет
0
nd2
2835 / 2403 / 1057
Регистрация: 29.01.2016
Сообщений: 8,046
22.05.2017, 00:13 16
Цитата Сообщение от Анела Китано Посмотреть сообщение
Ну, под файлом же понимается последовательность байт, в любом случае.
Что ты говоришь? А у файла есть размер? Или размер не важен?

Добавлено через 3 минуты
Цитата Сообщение от Анела Китано Посмотреть сообщение
Проблема совсем не в том, нужно считать всю последовательность или нет
Проблема в том, что ты не обращаешь внимания на то, что тебе пишут:
Цитата Сообщение от nd2 Посмотреть сообщение
на самом деле меньше, потому что поток ломается из-за того, что файл открыт в текстовом режиме
Цитата Сообщение от nd2 Посмотреть сообщение
Если читаешь бинарными методами, то и открывать файл нужно в бинарном режиме.
Добавлено через 1 минуту
Как было, так и осталось (даже уменьшилось, только бинарным режимом не стало):
Цитата Сообщение от Анела Китано Посмотреть сообщение
C
1
f = fopen("rand.txt", "r+");
Цитата Сообщение от Анела Китано Посмотреть сообщение
C
1
f = fopen("rand.txt", "r");
0
22.05.2017, 00:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2017, 00:13

Считать строки файла и поместить в динамический массив строк
Ребята помогите. Нужно считать с файла, в котором 1 строка - 1 слово,...

Считать данные из файла в динамический массив соответствующего типа
Здравствуйте. Тема динамические структуры. Считать данные из файла в...

Заполнить динамический массив из файла и записать массив обратно в файл
Подскажите пожалуйста функцию которая будет заполнять Динамический массив из...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru