Re: Initialiser une chaine de taille contrainte.
Ludovic Brenta <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Pascal <[email protected]> writes: > Bonjour, > > Voici une question somme toute basique voire pour "débutant" mais les réponses trouvées ne me satisfont pas : > comment initialiser simplement une chaine de caractère contrainte en taille avec une valeur chaine (càd "toto") ? > > Je pourrais utiliser les chaines non contraintes, les très utiles Unbounded_String ou le faire en 2 temps : déclaration et affectation avec Ada.Strings.Fixed.Move. > > Quel est le problème ? > Prenons le type suivant : > type TTabChaine is array (1 .. 2) of String (1 .. 13); > Initialisons une constante de ce type avec des valeurs chaines de > longueurs variables et terminées par Ascii.NUL : Ce sont des chaînes de longueur fixe, 13 carctères, et le fait que l'un d'eux est un ASCII.NUL n'a aucune influence sur la longueur. > Je dois écrire : > NomsOK : constant TTabChaine := > (('F', '1', '2', '.', 't', 'x', 't', ASCII.NUL, others => ' '), > ('g', 'n', 'a', 't', '.', 'e', 'x', 'e', ASCII.NUL, others => ' ')); > > Ce qui n'est, accordons le, vraiment pas lisible. type String_Access is access String; type String_Array is array (1 .. 2) of String_Access; Strings : constant String_Array := (1 => new String'("F12.txt"), 2 => new String'("gnat.exe")); et ne surtout pas ajouter d'ASCII.NUL sauf, éventuellement, au moment de passer les chaînes à un sous-programme importé du C. Dans ce dernier cas, utiliser Interfaces.C.To_C (...). -- Ludovic Brenta. _______________________________________________ Site WWW de l'association Ada-France: http://www.ada-france.org/ [email protected] http://www.ada-france.org/mailman/listinfo/ada-france