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...
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".
Consultant indépendant.
Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
C, Fortran, XWindow/Motif, Java
Je ne réponds pas aux MP techniques
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";
Don't want money. Got money. Want admiration.
(A tribute to SSG)
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+
Don't want money. Got money. Want admiration.
(A tribute to SSG)
merci à tous c'est vrai anacharsis kwariz à raison
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager