1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| Quand vous déclarez une chaîne longue :
S: string;
il n'est pas nécessaire de l'initialiser. Les chaînes longues sont automatiquement initialisées vides. Pour tester si une chaîne longue est vide, vous pouvez utiliser la variable EmptyStr :
S = EmptyStr;
ou la comparer à une chaîne vide :
S = '';
Une chaîne vide ne contient pas de données utilisables. Donc, essayer d'accéder par indice à une chaîne vide est similaire à l'accès à nil et provoque une violation d'accès :
var
S: string;
begin
S[i]; // cela provoque une violation d'accès
// instructions
end;
De même, si vous transtypez une chaîne vide en un PChar, le résultat est un pointeur nil. Donc, si vous transmettez un tel PChar à une routine qui doit le lire ou l'écrire, la routine doit gérer la valeur nil :
var
S: string; // chaîne vide
begin
proc(PChar(S)); // assurez-vous que proc peut gérer nil
// instructions
end;
Si ce n'est pas le cas, vous devez initialiser la chaîne :
S := 'No longer nil';
proc(PChar(S)); // proc n'a plus besoin de gérer nil
ou vous devez en spécifier la longueur en utilisant la procédure SetLength :
SetLength(S, 100); // attribue à la chaîne S une longueur dynamique 100
proc(PChar(S)); // proc n'a plus besoin de gérer nil
Quand vous utilisez SetLength, les caractères existant déjà dans la chaîne sont préservés mais le contenu de l'espace nouvellement alloué est indéterminé. Après un appel à SetLength, S est certain de référencer une chaîne unique, c'est-à-dire une chaîne avec un compteur de référence à 1. Pour connaître la longueur d'une chaîne, utilisez la fonction Length.
N'oubliez pas qu'une chaîne déclarée de la manière suivante :
S: string[n];
est implicitement une chaîne courte et pas une chaîne longue de longueur n. Pour déclarer une chaîne longue ayant spécifiquement la longueur n, déclarez une variable de type chaîne, puis utilisez la procédure SetLength :
S: string;
SetLength(S, n); |
Partager