Difference between revisions of "Character and string types"

From Lazarus wiki
Jump to navigationJump to search
(PShortString)
Line 113: Line 113:
 
==== Reference ====
 
==== Reference ====
 
* [http://www.freepascal.org/docs-html/ref/refsu14.html#x37-400003.2.8 FPC WideString documentation]
 
* [http://www.freepascal.org/docs-html/ref/refsu14.html#x37-400003.2.8 FPC WideString documentation]
 +
 +
== PShortString ==
 +
 +
A variable of type '''PShortString''' is a pointer that points to the first byte of a '''ShortString'''-type variable.
 +
 +
{| class="wikitable" style="text-align:center; width:100px"
 +
|-
 +
| style="width: 20%;" | #3 || style="width: 20%;" | a || style="width: 20%;" | b || style="width: 20%;" | c
 +
|-
 +
| style="width: 25%;" | ^
 +
|}
 +
 +
==== Reference ====
 +
* [[doc:rtl/system/pshortstring.html|RTL PShortString documentation]]
  
 
== PAnsiString ==
 
== PAnsiString ==
  
Variables of type '''PAnsiString''' are pointers to '''AnsiString'''-type variables. However, they don't point to the header, but to the first '''char''' of the '''AnsiString'''.
+
Variables of type '''PAnsiString''' are pointers to '''AnsiString'''-type variables. However, unlike '''PShortString'''-type variables they don't point to the first byte of the header, but to the first '''char''' of the '''AnsiString'''.
  
 
{| class="wikitable" style="text-align:center; width:300px"
 
{| class="wikitable" style="text-align:center; width:300px"

Revision as of 17:14, 28 December 2013

Free Pascal supports several types of characters and strings.

AnsiChar

A variable of type AnsiChar, also referred to as char, is exactly 1 byte in size, and contains one ASCII character.

a

Reference

WideChar

A variable of type WideChar, also referred to as UnicodeChar. is exactly 2 bytes in size, and contains one (part of) Unicode character in UTF-16 encoding. Note: it is impossible to encode all Unicode code points in 2 bytes. Therefore, 2 WideChars may be needed to encode a single code point.

a

References

PChar

A variable of type PChar is basically a pointer to a Char type, but allows additional operations. PChars can be used to access C-style null-terminated strings, e.g. in interaction with certain OS libraries or third-party software.

a b c #0
^

Reference

PWideChar

A variable of type PWideChar is a pointer to a WideChar variable.

a b c #0 #0
^

Reference

String

The type string may refer to ShortString or AnsiString, depending from the {$H} switch. If the switch is off ({$H-}) then any string declaration will define a ShortString. It size will be 255 chars, if not otherwise specified. If it is on ({$H+}) string without length specifier will define an AnsiString, otherwise a ShortString with specified length.

ShortString

Short strings have a maximum length of 255 characters. The length is stored in the character at index 0.

#3 a b c

Reference

AnsiString

Ansistrings are strings that have no length limit. They are reference counted and are guaranteed to be null terminated. Internally, a variable of type AnsiString is treated as a pointer: the actual content of the string is stored on the heap, as much memory as needed to store the string content is allocated.

a b c #0
RefCount Length

Reference

UnicodeString

Like AnsiStrings UniCodeStrings are reference counted, null-terminated arrays, but they are implemented as arrays of WideChars instead of regular Chars.

a b c #0 #0
RefCount Length

Reference

WideString

Variables of type WideString (used to represent unicode character strings in COM applications) resemble those of type UnicodeString, but unlike them they are not reference-counted. On Windows they are allocated with a special windows function which allows them to be used for OLE automation.

a b c #0 #0
Length

Reference

PShortString

A variable of type PShortString is a pointer that points to the first byte of a ShortString-type variable.

#3 a b c
^

Reference

PAnsiString

Variables of type PAnsiString are pointers to AnsiString-type variables. However, unlike PShortString-type variables they don't point to the first byte of the header, but to the first char of the AnsiString.

a b c #0
RefCount Length ^

Reference