bonjour,
Voici une petite explication si tu ne comprend pas:
1 2 3 4 5 6 7
| typedef struct machin{
char * chaine1;
char * chaine2;
...
char * chaineX; /* tes pointeurs de chaine de char */
struct machin *suivant; /* si tu fais une liste chainée */
}tableau_de_chaines; |
Chaque fois que tu vas vouloir créer un élément qui aura cette structure, tu n'auras pas à l'allouer.
Genre dans ton code tu mettras:
tableau_de_chaines montableau;
Comme ta structure ne contient que des pointeurs, tu n'auras pas besoin de les allouer (les pointeurs ont une taille fixe, celle de la profondeur d'adressage de la machine). Puis pour affecter un mot dans une chaine tu fais:
montableau.chaine1 = "toto";
Ensuite pour la fonction strcpy() qui est contenu dans la bibliothèque string.h,
son rôle est de copier une chaine entière dans une zone de mémoire. Son prototype est:
char *strcpy(char *destination, char *source);
Le caractère "\0" est lui aussi recopié et la fonction renvoie un pointeur vers la nouvelle chaine de strcpy().
ATTENTION: avant d'utiliser strcpy(), il faut allouer assez de place pour la chaine destinataire car strcpy() recopie systématiquement la totalité de la chaine source.
Donc dans ton cas tu fais soit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h>
#include <string.h>
typedef struct personne
{
int age;
char nom[30];
}nouveau;
int main(void)
{
nouveau p;
p.age=20;
strcpy(p.nom, "NomDupersonne");
printf("%s", p.nom);
return 0;
} |
Soit:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <stdio.h>
typedef struct personne
{
int age;
char *nom;
}nouveau;
int main(void)
{
nouveau p;
p.age=20;
p.nom="NomDupersonne";
printf("%s", p.nom);
return 0;
} |
Voila en espérant t'avoir éclairé sur le sujet

Partager