Dans cette solution, tu crées par allocation dynamique le C_Str en allouant suffisamment d'espace pour stocker la longueur (et les autres paramètres si il y a lieu) ET la chaine de caractères (plus un zéro terminal). (Voirl'exemple donné par Médinoc 2 messages avant celui-ci).
Les modifications du code pour passer à cette solution sont assez faciles à situer et à apporter puisque par rapport au code précédent, elles apparaissent comme un prélude à la fonction actuelle permettant de situer l'adresse de la structure par rapport à l'adresse de la chaine et en sortie (si il y a lieu) passer de l'adresse de la structure à celle de la chaine.
Par contre, si tu changes la longueur de la chaine, alors tu dois procéder à une réallocation du C_Str. C'est le principal inconvénient : l'adresse du C_Str peut changer. Ceci peut amener à modifier le prototype des fonctions et leur appel.
Une question, comment envisages-tu l'implémentation du fscanf ?
n1256 :Est-ce que c'est garantit par la norme ou cela peut changer suivant l'OS ?
6.7.2.1 Structure and union specifiers
...
13 Within a structure object, the non-bit-field members and the units in which bit-fields reside have addresses that increase in the order in which they are declared. A pointer to a structure object, suitably converted, points to its initial member (or if that member is a bit-field, then to the unit in which it resides), and vice versa. There may be unnamed padding within a structure object, but not at its beginning.
Partager