Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.

Правильно длинну ты незнаешь, но когда-то же узнаешь&#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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.029 c
15-1176731522
SkySpeed
2007-04-16 17:52
2007.05.13
Человек неизвестно каким чудом удалил учётку Администратора...


6-1163253396
Udaff
2006-11-11 16:56
2007.05.13
отправка почты


2-1176904358
Neket
2007-04-18 17:52
2007.05.13
Как узнать в путь...


2-1177478166
VaLkA
2007-04-25 09:16
2007.05.13
поиск в WebBrowser e


2-1177287360
Hero
2007-04-23 04:16
2007.05.13
Хелп!! Как из одной моей проги перетащить текст в другу мою прог





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский