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

Считать из файла структуры в массив (указателей) - C++

Восстановить пароль Регистрация
 
Ullaluna
 Аватар для Ullaluna
8 / 6 / 1
Регистрация: 11.11.2013
Сообщений: 75
14.01.2014, 01:37     Считать из файла структуры в массив (указателей) #1
Ребята, как это грамотно сделать? Мой моск вскипел. Файл бинарный, количество экземпляров всегда одно и то же. В программе эти структуры обрабатываются, значения изменяются, затем снова записываются в файл. Вот эта функция адекватно работает только для первого элемента массива:

C++
1
2
3
4
struct dates {
  char[10] name;
  int serNumber;
  double volume;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dates* readFile(int arrsize) {
  dates data1, data2_temp;
  dates *arrofStruct[arrsize];
  int i = 0;
  dStream=fopen("binfile", "rb");
  fread(&data1, sizeof(dates), 1, dStream);
  
  do {
    
   data2_temp = data1;
   *arrofStruct[i] = data1;
   i++;
  }
  while (fread(&data1, sizeof(dates), 1, dStream));
  fclose(dStream);
  
  return *arrofStruct;
}
Что-то я напутала с адресами?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 681
14.01.2014, 01:47     Считать из файла структуры в массив (указателей) #2
Не понятно для чего вам нужно вот эта строка?
C++
1
data2_temp = data1;
И ошибка скорей всего вот в этой строке 6 и 14. Т.к если смотреть на офф-источник http://www.cplusplus.com/reference/cstdio/fread/ (не реклама), то там процедура fread 2 аргумент имеет кол-во, а третий как раз таки размер считываемых данных, а у вас все наоборот.
Ullaluna
 Аватар для Ullaluna
8 / 6 / 1
Регистрация: 11.11.2013
Сообщений: 75
14.01.2014, 01:53  [ТС]     Считать из файла структуры в массив (указателей) #3
Цитата Сообщение от Bend3r Посмотреть сообщение
Не понятно для чего вам нужно вот эта строка?
Это рудимент с предыдущего варианта функции. Не нужен, забыла удалить.

Цитата Сообщение от Bend3r Посмотреть сообщение
процедура fread 2 аргумент имеет кол-во, а третий как раз таки размер считываемых данных
Разве?
size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
Считываем по одной структуре за раз. Размера данной структуры. Что не так?
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 681
14.01.2014, 02:17     Считать из файла структуры в массив (указателей) #4
Цитата Сообщение от Ullaluna Посмотреть сообщение
Считываем по одной структуре за раз. Размера данной структуры. Что не так?
C++
1
fread(&data1, sizeof(dates), 1, dStream);
вот как написали вы. Получается количество равно размеру, в общем попробуйте поменять местами 2 и 3 аргумент. Вот так.
C++
1
fread(&data1, 1, sizeof(dates), dStream);
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.01.2014, 21:24     Считать из файла структуры в массив (указателей) #5
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
struct dates 
{
    char name[10];
    int serNumber;
    double volume;
};
 
 
dates* readFile(int arrsize) 
{
  dates* arrofStruct = new dates[arrsize];
  
  FILE* dStream = fopen("binfile", "rb");
  if (!dStream) 
  {
      printf("Error opening binfile!");
      return;
  }
  
  int i = 0;
  while (fread(&arrofStruct[i], sizeof(dates), 1, dStream))
  {
      i++;
      if (i == arrsize) break;
  }
  
  fclose(dStream);
  
  return arrofStruct;
}
Yandex
Объявления
14.01.2014, 21:24     Считать из файла структуры в массив (указателей)
Ответ Создать тему
Опции темы

Текущее время: 15:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru