Difference between revisions of "Character and string types/fr"

From Lazarus wiki
Jump to navigationJump to search
Line 31: Line 31:
 
* [[doc:rtl/system/unicodechar.html|RTL UnicodeChar documentation]]
 
* [[doc:rtl/system/unicodechar.html|RTL UnicodeChar documentation]]
  
== Array of Char ==
+
== Tableau de Char ==
  
Early Pascal implementations that were in use before 1978 didn't support a string type (with the exception of string constants). The only possibility to store strings in variables was the use of arrays of char. This approach has many disadvantages and is no longer recommended. It is, however, still supported to ensure backward-compatibility with ancient code.
+
Les premières implémentations de Pascal, utilisées avant 1978, ne supportaient pas le type chaîne (exception faite des constantes chaînes). La seule possibilité pour stocker des chaînes dans des variables consistaient à utiliser des tableaux de char. Cette approche a de nombreux inconvénients et n'est plus recommandée. C'est néanmoins toujours supporté pour assurer la compatibilité descendante avec l'ancien code.
  
===Static Array of Char===
+
===Tableau de Char statique===
  
 
<syntaxhighlight>
 
<syntaxhighlight>
Line 48: Line 48:
 
   aOldString4[3] := 'd';
 
   aOldString4[3] := 'd';
 
end;
 
end;
</syntaxhighlight> The static array of char has now the content:
+
</syntaxhighlight> Le tableau de char statique contient dorénavant:
  
 
{| class="wikitable" style="text-align:center; width:100px"
 
{| class="wikitable" style="text-align:center; width:100px"
Line 55: Line 55:
 
|}
 
|}
  
{{Note|Unassigned chars can have any content, depending on what was just in memory when the memory for the array was made available.}}
+
{{Note|Les chars non affectés contiennent n'importe quoi, en fonction de ce qui se trouvait en mémoire quand la mémoire pour le tableau est devenue disponible (le contenu du tableau n'est pas initialisé).}}
  
===Dynamic Array of Char===
+
===Tableau de Char dynamique===
  
 
<syntaxhighlight>
 
<syntaxhighlight>
 
var
 
var
   aOldString: Array of Char;  
+
   aOldString: Array of Char; // pas de dimension!!
 
begin
 
begin
 
   SetLength(aOldString, 5);
 
   SetLength(aOldString, 5);
Line 69: Line 69:
 
   aOldString[3] := 'd';
 
   aOldString[3] := 'd';
 
end;
 
end;
</syntaxhighlight> The dynamic array of char has now the content:
+
</syntaxhighlight> Le tableau de char dynamique contient dorénavant:
  
 
{| class="wikitable" style="text-align:center; width:100px"
 
{| class="wikitable" style="text-align:center; width:100px"
Line 76: Line 76:
 
|}
 
|}
  
{{Note|Unassigned chars in dynamic arrays have a content #0, cause empty positions of all dynamic arrays are initially initialised with 0 (or #0, or nil, or ...)}}
+
{{Note|Les chars non affectés dans les tableaux dynamiques contiennent des #0, parce que les positions vides de tous les tableaux dynamiques sont dès le départ initialisées avec 0 (ou #0, ou nil, ou ...)}}
  
 
== PChar ==
 
== PChar ==

Revision as of 23:01, 9 July 2014

Deutsch (de) English (en) español (es) français (fr) русский (ru) 中文(中国大陆)‎ (zh_CN)

Free Pascal supportes plusieurs types de caractères et de chaînes. Il s'étendent du simple caractère ANSI aux chaînes Unicode et incluent aussi les types pointer. Les différence s'appliquent aussi aux encodages et au comptage de référence.

AnsiChar

Une variable de type AnsiChar, aussi mentionnée comme char, a une taille d'exactement un octet et contient un caractère ANSI.

a

Reference

WideChar

Une variable du type WideChar, aussi mentionnée commeUnicodeChar, est exactement d'une taille de 2 octets, et contient une partie des caractères Unicode dans l'encodage UTF-16. Note : il est impossible d'encodes tous les points de code Unicode dans 2 octets. En conséquence, 2 WideChars pourraient être nécessaires pour encoder un simple point de code.

a

References

Tableau de Char

Les premières implémentations de Pascal, utilisées avant 1978, ne supportaient pas le type chaîne (exception faite des constantes chaînes). La seule possibilité pour stocker des chaînes dans des variables consistaient à utiliser des tableaux de char. Cette approche a de nombreux inconvénients et n'est plus recommandée. C'est néanmoins toujours supporté pour assurer la compatibilité descendante avec l'ancien code.

Tableau de Char statique

type
  TOldString4 = array[0..3] of char;
var
  aOldString4: TOldString4; 
begin
  aOldString4[0] := 'a';
  aOldString4[1] := 'b';
  aOldString4[2] := 'c';
  aOldString4[3] := 'd';
end;

Le tableau de char statique contient dorénavant:

a b c d
Light bulb  Remarque: Les chars non affectés contiennent n'importe quoi, en fonction de ce qui se trouvait en mémoire quand la mémoire pour le tableau est devenue disponible (le contenu du tableau n'est pas initialisé).

Tableau de Char dynamique

var
  aOldString: Array of Char; // pas de dimension!!
begin
  SetLength(aOldString, 5);
  aOldString[0] := 'a';
  aOldString[1] := 'b';
  aOldString[2] := 'c';
  aOldString[3] := 'd';
end;

Le tableau de char dynamique contient dorénavant:

a b c d #0
Light bulb  Remarque: Les chars non affectés dans les tableaux dynamiques contiennent des #0, parce que les positions vides de tous les tableaux dynamiques sont dès le départ initialisées avec 0 (ou #0, ou nil, ou ...)

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.

Reference

ShortString

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

#3 a b c

Reference

AnsiString

Ansistrings or UTF8Strings 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.

Light bulb  Remarque: The UnicodeString naming is a bit ambiguous but probably due to its use in Delphi on Windows, where the OS uses UTF16 encoding; it's not the only string type that can hold Unicode string data (see also UTF8String)...
a b c #0 #0
RefCount Length

Reference

UTF8String

Currently, the type UTF8String is an alias to the type AnsiString. It is meant to contain UTF8 encoded strings (i.e. unicode data ranging from 1..4 bytes per character). UTF8String is the default string in Lazarus and LCL.

Reference

UTF16String

The type UTF16String is an alias to the type WideString. In the LCL unit lclproc it is an alias to UnicodeString.

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.

WideStrings consist of COM compatible UTF16 encoded bytes on Windows machines (UCS2 on Windows 2000), and they are encoded as plain UTF16 on Linux, Mac OS X and iOS.

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 (which defines the length of the ShortString).

#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

PUnicodeString

Variables of type PUnicodeString are pointers to variables of type UnicodeString.

a b c #0 #0
RefCount Length ^

Reference

PWideString

Variables of type PWideString are pointers. They point to the first char of a WideString-typed variable.

a b c #0 #0
Length ^

Reference

See also