Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
#1

Чтение файла неизвестного размера - C++

02.04.2012, 11:09. Просмотров 1820. Ответов 11
Метки нет (Все метки)

Необходимо прочитать файл неизвестного размера, динамически растягивая массив, загнать файл в массив и узнать его размер. Приведите пожалуйста пример кода на Си или Си++. Я пробовал играться с realloc'ом, но не выходит. Что-то не так делаю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2012, 11:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение файла неизвестного размера (C++):

Из текстового файла неизвестного размера вывести на экран все предложения, не содержащие запятых - C++
Привет, Программисты! :) Нужна ваша помощь... Есть задача по поводу работы со строками: "Из текстового файла неизвестного размера вывести...

Массив неизвестного размера - C++
Хочу написать функцию для нахождения предела последовательности. А и eps вводятся с клавиатуры. Цикл do while - обязательное условие. n...

Умножение матрицы неизвестного размера - C++
задание такоэ нужно ввести размерность 2 матриц с клавиатуры а потом их перемножить... но проблема в том что не знаю как записать...

Массив заранее неизвестного размера - C++
Возможно сейчас произвучит тупой вопрос,не судите строго,но можно каким-нибудь образом сделать чтобы размер массива задавался пользователем?

Ввод текста неизвестного размера в массив - C++
(Консольное приложение) Я хочу сделать так чтобы при вводе текста программа записывала каждый символ по порядку (в том числе и пробел) из...

Как обьявить массив неизвестного размера? - C++
Помогите разобраться, есть класс, в котором обьявлен двумерный массив структур. Размер массива неизвестен, но должен быть определен во...

11
M128K145
Эксперт С++
8289 / 3509 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
02.04.2012, 12:41 #2
а если использовать std::vector?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 12:44 #3
Покажи, как игрался?
0
Байт
Эксперт C
16144 / 10422 / 1552
Регистрация: 24.12.2010
Сообщений: 19,730
02.04.2012, 12:56 #4
Цитата Сообщение от Frostegater Посмотреть сообщение
но не выходит
Что именно не выходит? И каков порядок величины файла?
А вообще-то есть функция filelength
0
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
02.04.2012, 13:09  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
char **buf = NULL;
int i = 0;
char str[512]; 
FILE *fd = fopen(src, "rb");
while(!feof(fd))
{
    fgets(str, 512, fd);
    i++;
    buf = (char **) realloc(buf, sizeof(char *)*i);
    buf[i - 1] = (char *) malloc(strlen(buf) + 1);
    strcpy(buf[i - 1], str);
}
fclose(fd);
используется strlen, на сколько я понимаю он считает до EOF символа а в файле они имеются (ну нули)..
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 13:11 #6
Цитата Сообщение от Frostegater Посмотреть сообщение
считает до EOF символа а в файле они имеются (ну нули)
EOF != 0
1
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
02.04.2012, 13:28  [ТС] #7
Цитата Сообщение от Deviaphan Посмотреть сообщение
EOF != 0
хм незнал.. но суть в том, что strlen определяет размер до следующего нуля
0
Петррр
5962 / 3399 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
02.04.2012, 13:29 #8
http://www.cyberforum.ru/cpp-beginne...ml#post2240784
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
02.04.2012, 13:40 #9
Цитата Сообщение от Frostegater Посмотреть сообщение
хм незнал..
sizeof(EOF) > sizeof(char). В два раза, примерно...
1
Frostegater
6 / 6 / 0
Регистрация: 30.08.2011
Сообщений: 47
03.04.2012, 10:24  [ТС] #10
Цитата Сообщение от Петррр Посмотреть сообщение
там чтение текстового файла (без нулевых байтов), а мне нужно прочитать бинарник и так чтоб загнать в массив.. и последующем работать с ним. Я пробовал делать громадный массив char arr[0xFFFFFF], но вылетает с ошибкой.. в общем, не умею я работать с динамической памятью. Манов начитался уйму. Понял, но сделать не могу. Помогите пжл, но только на маны не шлите, уже тошнит..
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
03.04.2012, 10:45 #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main()
{
   int oldSize = 100;
   char * array = new char[oldSize];
 
   while(100500)
   {
      int size = oldSize + 25;
      char * newArray = new char[size];
      memcpy( newArray, array,  oldSize );
      delete[] array;
      array = newArray;
      oldSize = size;
   }
}
На каждой итерации цикла, массив будет увеличиваться на 25 элементов и в него будет копироваться данные из старый массив. И так пока память не кончится.
Разбирайся.

Добавлено через 1 минуту
new/delete замени на malloc/free
0
Flash_Zero
3 / 3 / 1
Регистрация: 07.03.2012
Сообщений: 5
03.04.2012, 14:19 #12
Frostegater,

Не по теме:

Кого мы видим

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2012, 14:19
Привет! Вот еще темы с ответами:

Ввод и вывод строки неизвестного размера - C++
Как ввести и вывести строку неизвестного размера в c++? Нигде просто нормального объяснения не нашел.

Можно ли создать вектор заранее неизвестного размера? - C++
Скажите пожалуйста, можно ли создать вектор заранее неизвестного размера так, чтобы пользователю перед его заполнением не нужно было...

Как передать в функцию указатель на двумерный массив заранее неизвестного размера? - C++
Ребята, скажите пожалуйста, как реализовать такую идею? Необходимо передать в функцию двумерный массив, чтобы она изменала его элементы....

Найти формат неизвестного файла - C++
Задача звучит так: "Для файлов нескольких (не менее 3) широко используемых форматов составить базу данных, содержащую статистические...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
03.04.2012, 14:19
Ответ Создать тему
Опции темы

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