Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.13;
Скачать: CL | DM;

Вниз

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.

Правильно длинну ты незнаешь, но когда-то же узнаешь&#133 Вот тогджа и выдельшь память.

Твой пример:
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,
Постараться предугодать сколько надо, а лишние потом удалить уменьшив массив&#133


 
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]

> Ни фига себе&#133

А что тут может не работать?


 
Asail   (2007-04-22 14:40) [15]


> А что тут может не работать?

Когда завершается цикл? Никогда! Т.е. на падении при r=10, т.к. размер массива не меняется (всегда = 10), возникнет исключение (Invalid Pointer Operation), при котором вывалится не только цикл, но и ф-я его вызвавшая...
ЭТОТ код корректно работать не может!!!


 
Kolan ©   (2007-04-22 16:10) [16]

> Когда завершается цикл? Никогда!

Я думаю это псевдо код&#133



Страницы: 1 вся ветка

Текущий архив: 2007.05.13;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.067 c
2-1177049800
allucard
2007-04-20 10:16
2007.05.13
Можно ли перевести прогу в Design-Time


15-1176501642
Германн
2007-04-14 02:00
2007.05.13
Ищу ресурсы :-)


2-1177493803
allucard
2007-04-25 13:36
2007.05.13
Как отсортировать список TListView?


15-1176289781
ArtemESC
2007-04-11 15:09
2007.05.13
Файловый обменник....


15-1176651455
nnn1
2007-04-15 19:37
2007.05.13
GetLowerBound / GetUpperBound из .NET