Sign in Join
Wiki copytemporary

String/ru: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: String/ru

OldNewLine
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).*

Back to history