Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 20:56   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию "Move" для объединения строковых массивов

Добрый день форумчане,
Такой вопрос:
почему оператор "Move" правильно отрабатывает на объединении двух строк, и совсем НЕ отрабатывает на объединении двух строковых динамических массивов (PArray1 и PArray2). Где PArray2, нужно просто записать в конец PArray1.
Я просто не хочу в цикле их объединять.

Код:
PArray1, PArray2: array of string;
LLength_Ar1: integer;
....
LLength_Ar1 := Length(PArray1);
Move(PArray2[0], PArray1[LLength_Ar1], Length(PArray2)); // <- эта строка уже не отрабатывает
...
Заранее спасибо.
P.S. знаю что подобный вопрос поднимался на форуме(http://www.programmersforum.ru/showthread.php?t=62943), но там всетаки не понял - почему такое коряво работает
KBO вне форума Ответить с цитированием
Старый 29.04.2013, 21:17   #2
alextrof94
Форумчанин
 
Регистрация: 16.03.2013
Сообщений: 599
По умолчанию

Ну строка вроде как статический массив в 256 символов, нет? А сама переменная - ссылка на первый блок памяти, нет? И длинна string определяется нуль символом на конце. Я, честно, хз.
А еще может быть такая весчь, что надо сначала нарастить динамический массив, а затем в него сдвигать память, нет?
Типа:
Код:
PArray1, PArray2: array of string;
LLength_Ar1: integer;
...
LLength_Ar1 := Length(PArray1);
SetLength(PArray1,Length(PArray2)+LLength_Ar1);
Move(PArray2[0], PArray1[LLength_Ar1], Length(PArray2));
...
alextrof94$gmail.com

Последний раз редактировалось alextrof94; 29.04.2013 в 21:20.
alextrof94 вне форума Ответить с цитированием
Старый 29.04.2013, 21:33   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

На размер строки надо умножать в любом случае. С String[сколько-то] и SetLength вроде должно работать. А вот просто String - это указатель на структуру с символами, длиной и количеством ссылок, и если побайтово копировать, то потом ещё количество ссылок увеличивать надо.

Последний раз редактировалось Somebody; 30.04.2013 в 11:10. Причина: пунктуация
Somebody вне форума Ответить с цитированием
Старый 29.04.2013, 22:07   #4
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
почему оператор "Move" правильно отрабатывает на объединении двух строк, и совсем НЕ отрабатывает на объединении двух строковых динамических массивов (PArray1 и PArray2). Где PArray2, нужно просто записать в конец PArray1.
Потому, что он для этого не предназначен.
Так же, как отвертка не предназначена для закручивания гаек.
Цитата:
Я просто не хочу в цикле их объединять.
А, собственно, почему?
s-andriano вне форума Ответить с цитированием
Старый 30.04.2013, 01:52   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от alextrof94 Посмотреть сообщение
Ну строка вроде как статический массив в 256 символов, нет? А сама переменная - ссылка на первый блок памяти, нет? И длинна string определяется нуль символом на конце. Я, честно, хз.
А еще может быть такая весчь, что надо сначала нарастить динамический массив, а затем в него сдвигать память, нет?
Типа:
Код:
PArray1, PArray2: array of string;
LLength_Ar1: integer;
...
LLength_Ar1 := Length(PArray1);
SetLength(PArray1,Length(PArray2)+LLength_Ar1);
Move(PArray2[0], PArray1[LLength_Ar1], Length(PArray2));
...
Та я ж, сначала и наращивал, используя "SetLength", но дело в том, что "SetLength" - отрабатывает, в PArray1, появляются два пустых места в конце PArray1 (под элементы PArray2), ну т.е. у меня в PArray2 всего два элемента (в этот раз), только после отработки "Move", PArray1 всеравно остается с этими двумя незаполненными элементами в конце массива

Последний раз редактировалось KBO; 30.04.2013 в 01:59.
KBO вне форума Ответить с цитированием
Старый 30.04.2013, 01:57   #6
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Потому, что он для этого не предназначен.
Так же, как отвертка не предназначена для закручивания гаек.А, собственно, почему?
Та я собственно подумал, а чего не может быть более простого способа, просто объединить два string массива (т.е. добавить один массив в конец другого), нежели выполнять цикл
KBO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MS Excel: Отмена объединения ячеек и заполнение "новых" ячеек текстом (числом), бывшим ранее в объединенной ячейке D.Sergienko Microsoft Office Excel 3 24.06.2013 15:18
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
как задать "мерность" масива и для каждого "измерения" максимальный индекс vova_ Общие вопросы Delphi 5 31.07.2012 22:14
Ошибка "Expecting a valid name" для оператора "<" в JScript Ратибор Редоран JavaScript, Ajax 0 15.12.2011 14:38
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04