String/ru

From Free Pascal wiki
Jump to navigationJump to search

Deutsch (de) English (en) español (es) français (fr) русский (ru)

String является типом данных, который может содержать символы.

Использование

var
  s, str1, str2, str3, str4: string;
  c: char;
  n: integer;

str1 := 'abc';     // присваивание
str2 := '123';     // строка содержит символы 1, 2 и 3
str3 := #13#10;    // cr lf (символы перевода строки и возврата каретки)
str4 := 'это строка, заключенная в ''кавычки''';  // использование кавычек внутри строки
s := str1 + str2;  // конкатенация (объединение) строк
c := s[1];         // использование индекса массива для доступа к символу
n := length( s );  // длина строки s

Синонимы

String является синонимом типам ShortString, AnsiString или UnicodeString (UTF16) в зависимости от настроек компилятора.

Если директивы компилятора {$H} или {$LongStrings} включены ( {$H+} или {$LongStrings ON} ), то тип String соответствует типу AnsiString, в случае если директивы выключены ( {$H-} или {$LongStrings OFF} ), то тип String соответствует типу ShortString. Какой тип строки является синонимом типа String также может быть установлено с помощью опции командной строки -Sh. Компилятор FPC также поддерживает директиву {$mode delphiunicode} для совместимости с Delphi UTF16.


Примечание: директива компилятора {$mode} также устанавливает синоним типа String. После указания режима компилятора FPC (по умолчанию), ObjFPC, MacPAS или TP тип String будет эквивалентен типу ShortString. После указания режима компилятора Delphi тип String будет эквивалентен типу AnsiString. Таким образом настройка параметра синонима для типа String должна быть выполнена после указания режима компилятора, чтобы предотвратить её переопределение:

{$H+}            // тип String является синонимом типа AnsiString
{$mode ObjFPC}   // также влияет на синоним типа String - после данной директивы тип String будет синонимом типа ShortString
{$H+}            // тип String снова является синонимом типа AnsiString

Переменная типа String, объявленная с указанием длины, всегда будет эквивалентна типу ShortString, независимо от настройки компилятора для синонима типа String.

{$H+}            // тип String является синонимом типа AnsiString
var
   name : String[25]; // переменная name является ShortString, поскольку указание длины переопределяет настройку синонима

Учтите, что все типы longstring являются управляемыми, в то время как тип ShortString таковым не является: у него нет счетчика ссылок.

Строковые типы

Различные строковые типы - ShortString, AnsiString, WideString и UnicodeString - отличаются максимальной длиной строки и её содержимым:

  • ShortString имеет фиксированную максимальную длину, определяемую программистом (например name : String[25];), но при этом ограниченную 255 символами. Если длина переменной типа ShortString не указана явно, то длина устанавливается равной 255. В этом типе нет счетчика ссылок.
  • AnsiString имеет переменную длину, ограниченную значением High(SizeInt) (которое зависит от платформы) и доступной памятью. В этом типе есть счетчик ссылок.
  • WideString имеет переменную длину, как и тип AnsiString, но состоит из символов WideChar вместо символов Char. Данный тип совместим со строковым типом BWSTR и в нем нет счетчика ссылок.
  • UnicodeString похож на тип WideString, но тип UnicodeString является управляемым типом и содержит счетчик ссылок, в то время как WideString является совместимым с типом BWSTR, который совместим с COM и не содержит счетчик ссылок.

Note that BWSTR types rely on COM marshaling or - when used alone - copy semantics instead of reference counting. In a COM context they are governed by the COM marshaling subsystem if available. (i.e. Windows)

См. также

Типы данных
Простые типы Boolean | Byte | Cardinal | Char | Currency | Extended | Int64 | Integer | Longint | Pointer | Real | Shortint | Smallint | Word
Сложные типы Array | Class | Record | Set | String | Shortstring