String/ru: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: String/ru
| Old | New | Line | |
|---|---|---|---|
| 1 | + | **String** является [[Type/ru|типом данных]], который может содержать [[Character and string types/ru|символы]]. | |
| 2 | + | ||
| 3 | + | ## Использование | |
| 4 | + | ||
| 5 | + | ``` pascal | |
| 6 | + | var | |
| 7 | + | s, str1, str2, str3, str4: string; | |
| 8 | + | c: char; | |
| 9 | + | n: integer; | |
| 10 | + | ||
| 11 | + | str1 := 'abc'; // присваивание | |
| 12 | + | str2 := '123'; // строка содержит символы 1, 2 и 3 | |
| 13 | + | str3 := #13#10; // cr lf (символы перевода строки и возврата каретки) | |
| 14 | + | str4 := 'это строка, заключенная в ''кавычки'''; // использование кавычек внутри строки | |
| 15 | + | s := str1 + str2; // конкатенация (объединение) строк | |
| 16 | + | c := s[1]; // использование индекса массива для доступа к символу | |
| 17 | + | n := length( s ); // длина строки s | |
| 18 | + | ``` | |
| 19 | + | ||
| 20 | + | ## Синонимы | |
| 21 | + | ||
| 22 | + | **String** является синонимом типам [[Character and string types/ru|ShortString]], [[Character and string types/ru|AnsiString]] или [[Character and string types/ru|UnicodeString (UTF16)]] в зависимости от настроек компилятора. | |
| 23 | + | ||
| 24 | + | Если [директивы](http://freepascal.org/docs-html/current/prog/progch1.html#x5-40001) [[Compiler|компилятора]] {\$H} или {\$LongStrings} *включены* ( {\$H+} или {\$LongStrings ON} ), то тип **String** соответствует типу **AnsiString**, в случае если директивы *выключены* ( {\$H-} или {\$LongStrings OFF} ), то тип **String** соответствует типу **ShortString**. Какой тип строки является синонимом типа **String** также может быть установлено с помощью [опции командной строки](http://www.freepascal.org/docs-html/user/userap1.html) -Sh. Компилятор FPC также поддерживает директиву {\$mode delphiunicode} для совместимости с Delphi UTF16. | |
| 25 | + | ||
| 26 | + | Примечание: директива компилятора {\$mode} также устанавливает синоним типа **String**. После указания режима компилятора *FPC* (по умолчанию), *ObjFPC*, *MacPAS* или *TP* тип **String** будет эквивалентен типу **ShortString**. После указания режима компилятора *Delphi* тип **String** будет эквивалентен типу **AnsiString**. Таким образом настройка параметра синонима для типа **String** должна быть выполнена после указания режима компилятора, чтобы предотвратить её переопределение: | |
| 27 | + | ||
| 28 | + | ``` pascal | |
| 29 | + | {$H+} // тип String является синонимом типа AnsiString | |
| 30 | + | {$mode ObjFPC} // также влияет на синоним типа String - после данной директивы тип String будет синонимом типа ShortString | |
| 31 | + | {$H+} // тип String снова является синонимом типа AnsiString | |
| 32 | + | ``` | |
| 33 | + | ||
| 34 | + | Переменная типа **String**, объявленная с указанием длины, всегда будет эквивалентна типу **ShortString**, независимо от настройки компилятора для синонима типа **String**. | |
| 35 | + | ||
| 36 | + | ``` pascal | |
| 37 | + | {$H+} // тип String является синонимом типа AnsiString | |
| 38 | + | var | |
| 39 | + | name : String[25]; // переменная name является ShortString, поскольку указание длины переопределяет настройку синонима | |
| 40 | + | ``` | |
| 41 | + | ||
| 42 | + | Учтите, что все типы *longstring* являются управляемыми, в то время как тип **ShortString** таковым не является: у него нет счетчика ссылок. | |
| 43 | + | ||
| 44 | + | ## Строковые типы | |
| 45 | + | ||
| 46 | + | Различные строковые типы - **ShortString**, **AnsiString**, **WideString** и **UnicodeString** - отличаются максимальной *длиной* строки и её *содержимым*: | |
| 47 | + | ||
| 48 | + | - [[Character and string types/ru|ShortString]] имеет *фиксированную максимальную длину*, определяемую программистом (например *name : String\[25\];*), но при этом ограниченную 255 символами. Если длина переменной типа **ShortString** не указана явно, то длина устанавливается равной 255. В этом типе нет счетчика ссылок. | |
| 49 | + | - [[Character and string types/ru|AnsiString]] имеет *переменную длину*, ограниченную значением High(SizeInt) (которое зависит от платформы) и доступной памятью. В этом типе есть счетчик ссылок. | |
| 50 | + | - [[Character and string types/ru|WideString]] имеет *переменную длину*, как и тип **AnsiString**, но состоит из символов [[WideChar/ru|WideChar]] вместо символов [[Char/ru|Char]]. Данный тип совместим со строковым типом BWSTR и в нем нет счетчика ссылок. | |
| 51 | + | - [[Character and string types/ru|UnicodeString]] похож на тип [[Character and string types/ru|WideString]], но тип **UnicodeString** является управляемым типом и содержит счетчик ссылок, в то время как **WideString** является совместимым с типом BWSTR, который совместим с COM и не содержит счетчик ссылок.\ | |
| 52 | + | \ | |
| 53 | + | ||
| 54 | + | 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) | |
| 55 | + | ||
| 56 | + | ## См. также | |
| 57 | + | ||
| 58 | + | - [[Character and string types/ru|Символьные и строковые типы]] - подробная справка, с описанием размещения символов в памяти и параметров доступа. | |
| 59 | + | ||
| 60 | + | --- | |
| 61 | + | *From the Free Pascal wiki, page "String/ru", as it stood on 2022-10-24 after a change by HappyLive6, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
