Re: Initialiser une chaine de taille contrainte.
Pascal <[email protected]>
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Message-ID | <[email protected]> |
Bonjour Ludovic, merci pour ta réponse.
C'est effectivement un des contournements possibles auquel je préfère utiliser Unbounded_String, quoi que...
Bref, ma question voulait surtout illustrer qu'Ada ne permet pas de mettre un littéral chaine dans un agrégat chaine (!) :
toto : constant String := ('$', "toto", '$'); -- erreur sur "toto"
Pourtant cette construction ne me choque pas outre mesure.
Pourquoi n'est-elle pas légale ?
Cordialement, Pascal.
http://blady.pagesperso-orange.fr
Le 29 déc. 2011 à 12:50, Ludovic Brenta a écrit :
> 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
_______________________________________________
Site WWW de l'association Ada-France: http://www.ada-france.org/
[email protected]
http://www.ada-france.org/mailman/listinfo/ada-france