Envoyé par
france38
Bonjour
Mon problème est que j'aimerai accéder au caractère & dans la tabEssai[0].forme[1] par exemple.
J'ai essayais tabEssai[0].*(forme[1]+2);
ceci ne marche pas.
1 2 3 4 5 6 7 8 9 10 11 12
| struct Essai{
char* forme[6];
};
typedef struct Essai Essai;
int main (void)
{
Essai tabEssai[3];
tabEssai[0].forme[1] = "# &";
tabEssai[0].forme[0] = "# é";
return 0;
} |
merci d'avance.
Salut
Déjà tu tentes de remplir forme[0] et forme[1] alors que ces zones n'ont pas été allouées.
Sinon ton vrai pb c'est que tu essaies de copier une chaine via l'opérateur "=". Or cet opérateur est dédié à la copie des éléments de base du C (les int, les float, etc). Or une chaine n'est pas un élément de base mais un tableau de caractères. Il te faut donc le copier caractère par caractère. Heureusement que les programmeurs de la librairie C y ont déjà pensé et qu'ils ont créé la fonction strcpy() qui le fait pour toi.
1 2 3 4 5 6 7 8 9 10 11 12
| struct s_Essai{
char forme[2][6];
};
typedef struct s_Essai t_Essai;
int main (void)
{
t_Essai tabEssai[3];
strcpy(tabEssai[0].forme[0], "# é");
strcpy(tabEssai[0].forme[1], "# &");
return 0;
} |
Sinon il y a aussi une autre possibilité: étant donné que les chaines "# &" existent en dur dans ton code, elles ont aussi une adresse. Donc tu peux stocker directement cette adresse et là, comme une adresse est un élément de base du C, tu peux utiliser l'opérateur "="
1 2 3 4 5 6 7 8 9 10 11
| typedef struct {
char* forme[2];
} t_Essai;
int main (void)
{
t_Essai tabEssai[3];
tabEssai[0].forme[0] = "# é";
tabEssai[0].forme[1] = "# &";
return 0;
} |
Envoyé par
france38
Mon problème est que j'aimerai accéder au caractère & dans la tabEssai[0].forme[1] par exemple.
printf("%c\n", tabEssai[0].forme[1][3]);
Partager