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

Как записать динамический массив в файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Динамическое распределение памяти http://www.cyberforum.ru/cpp-beginners/thread307344.html
Не подскажите , здесь где-то есть ошибка? задача : Даны действительные числа . Получить действительную квадратную матрицу порядка n<8, элементами которой являются числа , расположенные в ней по схеме: Матрица размещается в памяти динамически с помощью операции new, значение n вводится по запросу с клавиатуры. В конце работы программы освободить выделенную память. Вывести полученную матрицу. ...
C++ Строки на C++ Очень прошу помочь найти ошибку!) Нужно написать программу на языке C++ с использованием стандартных функций для обработки строк.(не CString). Писать в Microsoft Visual C++ 6. Задан текст, состоящий из слов, записанных через запятые, и заканчивающийся точкой. Длина текста не больше 200 символов, могут быть использованы любые символы. Словом считать последовательность символов, не содержащую... http://www.cyberforum.ru/cpp-beginners/thread307337.html
Определить скорость моторной лодки C++
как решить задачу на с++: Моторная лодка движется в спокойной воде со скоростью 5 м/сек. На полном ходу ее мотор выключается и через 40 сек после этого скорость лодки уменьшается до 2 м/сек. Определить скорость лодки через 2 минуты после остановки мотора, считая, что сопротивление воды пропорционально скорости движения лодки. Одна задача - одна тема
C++ сортировка массива из четных чисел по возрастанию и убыванию в виде функции.
Помогите, пожалуйста, найти ошибку. Есть целочисленный массив, нужно написать функцию, для сортировки всех его четных элементов по возрастанию, а нечетных по убыванию, и наоборот. Программу я написала. С нечетными числами работает замечательно, не могу понять, что происходит с четными. вывод их как -858993460. Помогите, пожалуйста (: #include "stdafx.h" #include<iostream> using...
C++ printf %"specificator" http://www.cyberforum.ru/cpp-beginners/thread307302.html
здравствуйте! прошу помочь, дан оператор вывода. printf("\n %-15s",++I,gol) что означают %-15s,++I и ? должно ли быть между ними этот пробел "\n %-15s"(хотя похоже на опечатку)? объясните плиз,а то я не очень то врубаюсь зы вопрос взят из теста
C++ getch(); ожидает ESC и при этом ест вводимый символ кусочек программы словаря процедура перевода слов с английского на русский struct types { char rus,angl; }; FILE *in;int j;char c; void angl_rus() подробнее

Показать сообщение отдельно
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
30.05.2011, 07:30     Как записать динамический массив в файл
Цитата Сообщение от nill Посмотреть сообщение
fwrite(massiv_resultatov, sizeof(massiv_resultatov), 1, fout); // big write, but quick
Sizeof не может адекватно обработать размер динамического массива, так как его элменты располагаются в куче по указаетлю. massiv_resultatov - тот самый указатель? Тогда sizeof вернёт размер самого указателя, зависящий от разрядности адреса, в 32-х битных системах это четыре байта, в 64-х битных - восемь байт. Или это сам контейнер? Тогда по нему можно сохранить только указаатель на сам массив и счётчик его элементов, а sizeof вернёт сумму их размеров.
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
class Array
{
 protected:
  type *Data; // Везде вместо type подставить действительный тип, или объявить выше define. Data - указатель на элменты
  unsigned int Count; // Число элементов
 public:
 ~Array ();
  Array ();
  Array (Array &x);
  Array & operator = (Array &x);
  void ReSize(unsigned int n);
  type & operator [] (unsigned int i);
  operator unsigned int ();
  bool SaveToFile (char *s);
  bool LoadFromFile (char *s);
};
Array::~Array ()
{
 if (Data)
 {
  delete [] Data;
 }
}
Array:: Array ()
{
 Data =NULL;
 Count=0;
}
Array::Array (Array &x)
{
 type *p1, *p2;
 if (Data)
 {
  delete [] Data;
 }
 if (x.Data)
 {  
  Data=new type [x.Count];
  if (Data)
  {
   Count=x.Count;
   for (p2=x.Data+Count-1, p1=Data+Count-1; p1>=Data; --p1, --p2)   
   {
    *p1=*p2;
   }
  }
  else
  {
   Count=0;
  }
 }
 else
 {
  Count=0;
 }
}
Array::Array & operator = (Array &x)
{
 type *p1, *p2;
 if (Data)
 {
  delete [] Data;
 }
 if (x.Data)
 {  
  Data=new type [x.Count];
  if (Data)
  {
   Count=x.Count;
   for (p2=x.Data+Count-1, p1=Data+Count-1; p1>=Data; --p1, --p2)   
   {
    *p1=*p2;
   }
  }
  else
  {
   Count=0;
  }
 }
 else
 {
  Count=0;
 }
 return *this;
}
void
Array:: ReSize(unsigned int n)
{
 type *p1, *p2, *Buffer;
 unsigned int Copyd;
 if (n!=Count)
 {
  Buffer=new type [n]; 
  if (Buffer)
  {
   if (Count<n)
   {
    Copyd=Count;
   }
   else
   {
    Copyd=n;
   }
   for (p1=Buffer+Copyd-1, p2=Data+Copyd-1; p1>=Buffer; --p1, --p2)
   {
    *p1=*p2;
   }
   Count=n;
  }
  else
  {
   Count=0;
  }
  if (Data)
  {
   delete [] Data;
  }
  Data=Buffer;
 }
}
type & 
Array::operator [] (unsigned int i)
{
 return Data[i];
}
Array::operator unsigned int ()
{
 return Count;
}
bool
Array::SaveToFile (char *s)
{
 HFILE File;
 DWORD l;
 DWORD Size;
  Size=Count*sizeof(type);
  if (Size/sizeof(type)!=Count)
  {
   return false;
  }
 File = CreateFile((LPTSTR) s, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,  NULL);
 if (File == INVALID_HANDLE_VALUE) 
 {
  return false;
 } 
 WriteFile(File, (void) *Data, Size, &l, NULL);
 return (l==Size);
}
bool
Array::LoadFromFile (char *s);
{
 HFILE File;
 DWORD l;
 DWORD Size;
 unsigned int n;
 File = CreateFileA((LPTSTR) s, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  GetFileSize(File, &Size);
  n=Size/sezof(type);
  if (n*sezof(type)!=Size)
  {
   if (Data)
   {
    delete [] Data;
   }
   Data=NULL;
   Count=0;
   return false;
  }
  if (n!=Count)
  {
   if (Data)
   {
    delete [] Data;
    Data=new type [n];
   }
  }
  if (Data)
  {
   ReadFile(File, (void *) Data, Size, &l, NULL);
   if (l==Size)
   {
    Count=n;
   }
   else
   {
    Count=0;
    delete [] Data;
    Data=NULL;
    return false;
   }
   return true;
  }
  Count=0;
  return false;
}
 
Текущее время: 00:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru