Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
Внизarray of string Найти похожие ветки
← →
Doom_2 © (2007-04-22 10:39) [0]Столь простой вопрос, но не могу разобраться:
Как правильно создать и заполнить динамический массив
array of string?
← →
sniknik © (2007-04-22 10:52) [1]у меня другой вопрос не менее простой но гораздо интереснее...
а как можно создать и заполнить неправильно???!!! сколько не пытаюсь ничего не выходит.
← →
Sholah_Weras © (2007-04-22 11:02) [2]Doom_2
Вкратце:
1) Объяви массив.
Mass_of_String: array of String;
2) В нужном месте задай длину этого массива.
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(Mass_os_String,10);
end;
3) Чтобы заполнить нужный элемент массива, нужно обратиться к этому элементу.
procedure TForm1.Button2Click(Sender: TObject);
begin
Mass_os_String[2] := "Что-то";
end;
← →
Kolan © (2007-04-22 11:03) [3]> Как правильно создать
var
Arr: array of string
I: Integer;
begin
SetLength(Arr, 10);
for I := Low(Arr) to High(Arr) do
Arr[I] := IntToStr(I);
end;
PS
Используй лучше TStrings(TStringList)
← →
Doom_2 © (2007-04-22 11:04) [4]Я делаю по книге:
var Massiv: array of string;
....
Massiv[1]:="C:\"; - ошибка!
← →
Kolan © (2007-04-22 11:05) [5]> Я делаю по книге:
Хде ты выделил под строки место?
← →
Doom_2 © (2007-04-22 11:09) [6]Значит - SetLength(Arr, 10);
Но я и выбрал динамический массив, что не знаю его длину!
Примерно так:
r:=0;
while i=1 do begin
Massiv[r]:="C:\"; - ошибка!
r:=r+1;
...
← →
Doom_2 © (2007-04-22 11:12) [7]Ну как же:
Arr[I] := IntToStr(I);
Arr: array of string
I: Integer;
Конкретная срока - конкретное значение... Нет?
← →
Sholah_Weras © (2007-04-22 11:14) [8]Ты длину устанавливаешь у массива Arr, а не у Massiv.
Вместо SetLength(Arr, 10) пиши SetLength(Massiv, 10).
← →
Kolan © (2007-04-22 11:18) [9]> Но я и выбрал динамический массив, что не знаю его длину!
Еще раз.
Вот ты объявил массив:
Arr: array of string
Но Arr[0] := ""; приведет к исключению, тк память еше не выделена.
Ты должен выделить ее с помошью SetLength.
Правильно длинну ты незнаешь, но когда-то же узнаешь… Вот тогджа и выдельшь память.
Твой пример:r:=0;
while i=1 do
begin
SetLength(Massiv, Length(Massiv)+1);
Massiv[r]:="C:\"; — ошибка!
r:=r+1;
end;
Но учьти, что выделять память так — модленно, лучьше делать это большими порциями.
А вообще не парься и используй TStrings:var
Strings: TStrings;
I: Integer;
begin
Strings := TStringList.Create;
try
for I := 1 to 100 do
Strings.Add("C:\");
finally
Strings.Free;
end;
← →
Doom_2 © (2007-04-22 11:19) [10]Можно менять длину массива в цикле?
r:=0;
while i=1 do begin
SetLength(Massiv, 10);
Massiv[r]:="C:\";
r:=r+1;
end;
← →
Doom_2 © (2007-04-22 11:20) [11]Всё - понял!
Огромное спасибо!
← →
Kolan © (2007-04-22 11:22) [12]> Можно менять длину массива в цикле?
Меняй на здоровье, но только повторяю лучьше минимизировать кол-во вызовов SetLength,
Постараться предугодать сколько надо, а лишние потом удалить уменьшив массив…
← →
Asail (2007-04-22 11:59) [13]
> r:=0;
> while i=1 do begin
> SetLength(Massiv, 10);
> Massiv[r]:="C:\";
> r:=r+1;
> end;
У тебя ЭТО работает??? Ни фига себе...
← →
Kolan © (2007-04-22 13:03) [14]> Ни фига себе…
А что тут может не работать?
← →
Asail (2007-04-22 14:40) [15]
> А что тут может не работать?
Когда завершается цикл? Никогда! Т.е. на падении при r=10, т.к. размер массива не меняется (всегда = 10), возникнет исключение (Invalid Pointer Operation), при котором вывалится не только цикл, но и ф-я его вызвавшая...
ЭТОТ код корректно работать не может!!!
← →
Kolan © (2007-04-22 16:10) [16]> Когда завершается цикл? Никогда!
Я думаю это псевдо код…
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.039 c