Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
ВнизОпределение размера динамического массива Найти похожие ветки
← →
Petrovich (2007-11-27 21:50) [0]Давно не писал на паскале, но вот снова его вспоминаю.
Использую Дельфи 6
Ниже - простенькая процедура. Очень прощшу объяснить в чем ошибка.
Требуется:
А) Узнать размер созданного динамического массива,
Б) а затем данные из этого массива записать в файл. Причем не используя поток (Stream)
SetLength(testarray,32768);
For actual:=0 to 32767 do testarray[actual]:=$E5;
actual:=SizeOf(testarray);
// var actual : integer.
// Но SizeOf возвращает размер указателя на массив, а не сам размер массива. В тоже время SizeOf(testarray^) выдает ошибку.
AssignFile(F,"test.dat");
// Var F : File;
Rewrite(F,1);
BlockWrite(F,testarray,(actual));
// BlockWrite Здесь не работает. Почему? В чем ошибка?
CloseFile(F);
← →
Юрий Зотов © (2007-11-27 22:02) [1]> Petrovich (27.11.07 21:50)
Ошибка в том, что переменная типа "динамический массив" - это неявный указатель. Его размер, естественно, 4.
> А) Узнать размер созданного динамического массива,
Length(testarray) - длина массива в его элементах;
Length(testarray) * SizeOf(тип_элементов) - длина массива в байтах (лучше объявить его с атрибутом packed).
> Б) данные из этого массива записать в файл. Причем не используя поток
@testarray[0] - адрес первого (т.е., нулевого) элемента массива.
← →
Anatoly Podgoretsky © (2007-11-27 22:07) [2]> Petrovich (27.11.2007 21:50:00) [0]
Не SizeOf, а Length
А запись testarray[0]
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.12.23;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.043 c