salut
je cherche comment déclarer une matrice 2d de chaine de caractère d'une façon dynamique en c ?
salut
je cherche comment déclarer une matrice 2d de chaine de caractère d'une façon dynamique en c ?
Si tu veux une matrice 2d de strings alors je pense qu'il va falloir passer par un char***.
Si tu veux tu peux en décomposer la construction avec :
Ensuite pour l'allocation tu vois vite que pour créer une matrice nxm tu vas devoir allouer d'abord une matrice avec n vecteurs :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 typedef char* String; // une chaîne de caractères typedef String* Vecteur; // une ligne (tableau 1d) de strings typedef Vecteur* Matrice; // un tableau 2d de strings
pour chaque vecteur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Matrice mat=(Matrice) malloc(n*sizeof(Vecteur));
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 for(i=0;i<n;i++) mat[i]=(Vecteur) malloc(m*sizeof(String));
puis pour chaque string :
Pour l'initialisation tu peux imbriquer les différentes boucles.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 for(i=0;i<n;i++) for(j=0;j<m;j++) { // au choix mat[i][j]=NULL; // ou pour une taille fixée STRMAXLEN mais dans ce cas autant définir // string comme un char[STRMAXLEN] // mat[i][j]=(String)malloc(STRMAXLEN*sizof(char)); // ou whatever // mat[i][j]=init_matrice(i,j); }
Pour libérer la mémoire, il faut faire tout en sens inverse, d'abord libérer tous les strings (si nécessaire), puis les vecteur, puis la matrice.
Bonjour,
Tu ne peux pas directement déclarer une matrice de caractère en 2D de façon dynamique .
Par contre tu peux déclarer plusieurs matrices de caractère en 1D de façon dynamique.
Et ensuite déclarer une matrice de pointeurs en 1D de façon dynamique.
(Chaque pointeur pointant vers une matrice de caractère)
Ainsi tu pourras choisir via ta matrice de pointeur la matrice de caractère voulue.
Et dans la matrice de caractère, tu pourra choisir le caractère voulu.
Avec cette méthode, tu pourras accéder à chaque caractère comme dans un tableau 2D (tab[ligne][colonne]) par contre si tu veux faire de l'arithmétique des pointeurs, méfie toi.
Tu devrais également jeter un petit coup d'oeil à l'exemple de la FAQ.
La FAQ expose le principe d'une allocation à 2 dimensions..
A toi de faire un (petit) effort...
![]()
salut !précise si tu veuxje cherche comment déclarer une matrice 2d de chaine de caractèreA+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 matrice[i][j]='a'; ou matrice[i][j]="azerty";
slaut
merci
je veux avoir la forme
matrice[i][j]="azerty";
Ah ben dans ce cas kwariz a parfaitement raison. J'avoue que je ne voyais pas la question dans ce sens là, même si en relisant on voit en effet que c'est cela.
dans chaque exécution de ton programme le maximum de i et j est-il connu r avant de travailler sur la matrice?
c-à-d une fois max(i) = 3 et max(j) = 8 et une autre max(i) =3 et max(j) = 5.
dois-tu travailler sur des matrices creuses ?
A+
merci à tous c'est vrai anacharsis kwariz à raison
![]()
Partager