Строки в Дельфи
— - Эксцепт из Интернета
1: Различные струны
Строки являются наиболее полезным типом всех типов данных в ObjectPascal. Многие функции проходят аргументы со строками. Поскольку существуют различные способы определения и использования строк в Delphi, в том числе типичные строки (строки) в Pascal, длинные строки, поддерживаемые Delphi (Ansistrings), массивы символов, аналогичные языку C (Arrayofchar) и указывают на указатель символов (pchar), и т. д. В следующей статье рассказывается о различиях и мерах предосторожности этих типов в определении и применении.
1 Традиционные пасальские струны
В Паскале типичная строка - это последовательность символов определенной длины. Каждая строка имеет длину установки (по умолчанию 255), и приведен следующий пример:
Вар
Адрес: строка;
Код: строка [50];
Адрес - это строка с длиной 255, а максимальная длина кода составляет 50.
Традиционная длина струны Pascal не может превышать 255.
Вы можете использовать операцию конкатенации строки «+», чтобы объединить строки вместе:
Результат: = String1+String2;
2 Длинные струны в Дельфи
В дополнение к поддержке традиционных коротких струн Pascal, Delphi также поддерживает длинные строки. Длинные персонажи называются Ansistring. Длинные строки динамически выделяют память, то есть память, необходимая для строк, выделяется только при использовании строк, поэтому их длина не ограничена. В Delphi, если вы используете String1: String As Type Description, String1 может быть либо короткой строкой, либо длинной строкой, в зависимости от настройки переключателя $ H в компиляторе. Значение по умолчанию - $ H+, которая представляет собой длинную строку ANSI. Длинные строки заканчиваются NULL, что означает, что длинные строки полностью совместимы с нильстами NULL-END на языке C.
Максимальная длина строки может быть установлена через функцию SetLength:
SetLength (String1,100);
3 Массив персонажей, похожий на C
Массив, начиная с 0, может быть использован для хранения струн, заканчивающихся нулем. Следующее определение:
Вар
Имя: массив [0..50] ofChr;
4 Указатель PCHAR
Если exendensyntax в Delphi был установлен (по умолчанию), массив символов, начиная с 0, полностью совместим с указателем Pchar, указывающим на символ, потому что имя массива символов, начинающееся с 0, является указателем, указывающим на первый символ массива символов. Полем Вы можете напрямую заплатить строку указателю PCHAR. Например:
вар
P: PCHAR;
Начинать
P: = 'Helloworld';
конец;
Таким образом, P указывает на кусок памяти, которая хранит строку «Helloworld» и заканчивается NULL.
Многие функции API интерфейса прикладной программы приложений Windows требуют типа Pchar в качестве параметра. При использовании указателя PCH сначала использует функцию GetMem (varp: pointer; size: Integer) для применения для распределения памяти. выпустить память. Например:
Varwindir, Sysdir: pchar;
Начинать
GetMem (Windir, 256); {выделить память для указателей}
GetWindowsDirectory (Windir, 128); {Поместите каталог установки Windows в Windir}
ShowMessage ('WindowsDirectoryis'+windir); {show result}
Конец;
Два: преобразование строки
Вышеуказанное вводит определение и использование четырех типов строк в Delphi. Поскольку различные функции имеют различные требования для типов параметров строки, требуется преобразование типа строки.
1 Вы можете использовать STRPA для преобразования строки, заканчивающейся NULL в короткую строку Pascal. Strpcopy завершает противоположное преобразование.
2 Поскольку длинные строки заканчиваются NULL, вы можете преобразовать длинные строки в тип pchar с литой. Использование: pchar (s), s - длинная строка. Кастинг возвращает указатель на первый символ длинной строки, а заостренная строка заканчивается нулевым. Например:
Вар
Подпись, сообщение: строка;
Подпись: = 'Helloworld!';
Mssage: = 'thisIsatestoflongstring';
MessageBox (0, pchar (сообщение), PCHAR (Подпись), MB_OK);
Сводка: При использовании строк в Delphi вы всегда должны четко прояснить тип строки, чтобы избежать путаницы. При понимании строк вы должны связывать строки с указателями и распределением памяти, чтобы улучшить понимание.