Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

array of string


Ingwar ©   (2006-10-27 11:20:00) 

Мне в программе нужно использовать массив строк, но прочитав про SetLength у меня возник вопрос: Если у меня строки разного размера, и зачастую копируются при помощи СopyMemory, то где гарантия, что у меня в процессе работы программы одна строка в массиве не налезет на другую. Можно ли в описании массива указать максимальный размер одного элемента  (строки)?
Сейчас пока использую двумерный array of char, а очень хотелось бы использовать массив строк =)


Ingwar   (2006-10-27 23:50:00) [1]

Мешало отсутствие знаний =)


Сергей М.   (2006-10-27 15:19:00) [2]


> Просто хотелось уйти от двумерного массива char


Кто ж мешал ?)


Ingwar   (2006-10-27 15:18:00) [3]

Спасибо всем! Динамика собсно и не нужна была... Просто хотелось уйти от двумерного массива char =)


ЮЮ   (2006-10-27 11:43:00) [4]


> и зачастую копируются при помощи СopyMemory, то где гарантия,
>  что у меня в процессе работы программы одна строка в массиве
> не налезет на другую.

а очень хотелось  бы использовать массив строк =)


Для копирования строк (string) не потребуется СopyMemory,  ибо string это и есть динамический массив символов.
SizeOf(string) = 4;
Array of String - массив 4-байтных указателей. Сами строки хранятся в другом месте, поэтому ситуация "у меня в процессе работы программы одна строка в массиве не налезет на другую"невозожна


Сергей М.   (2006-10-27 11:31:00) [5]


> Desdechado ©   (27.10.06 11:28) [4]


Автор спросил, можно ли ограничить в описаниидлину каждой из строк в составе массива. Чем не ограничение в описании ? Динамику, разумеется, при этом придется похоронить


Desdechado   (2006-10-27 11:28:00) [6]

> array of String[макс.длина]
Это уже не динамическая длина, а фиксированная. И выделяется она сразу, AFAIK


Desdechado   (2006-10-27 11:26:00) [7]

SetLength гарантирует, что строки не налезут друг на друга.
А вот с CopyMemory тебе придется самому отслеживать этот момент, на тоона и низкоуровневая функция.


Сергей М.   (2006-10-27 11:23:00) [8]


> где гарантия, что у меня в процессе работы программы одна
> строка в массиве не налезет на другую


Гарантию можешь дать только ты сам, не допуская ошибок в своей программе.


> Можно ли в описании массива указать максимальный размер
> одного элемента  (строки)?


Да, разумеется.

array of String[макс.длина]

Но про SetLenght() при этом придется забыть


Johnmen   (2006-10-27 11:23:00) [9]

см. TStringList


Наверх

Титульная страница Поиск, карта сайта Написать письмо