[C] Fonction Pointeur + char a double tableau
Fermé
cs-bilou
Messages postés
769
Date d'inscription
dimanche 2 décembre 2007
Statut
Membre
Dernière intervention
24 février 2011
-
24 sept. 2009 à 20:25
java4ever - 24 sept. 2009 à 23:42
java4ever - 24 sept. 2009 à 23:42
A voir également:
- [C] Fonction Pointeur + char a double tableau
- Double ecran - Guide
- Whatsapp double sim - Guide
- Tableau croisé dynamique - Guide
- Afficher un tableau en c - Forum C
- Tableau ascii - Guide
2 réponses
Ah les pointeurs et les tableaux !
Contraintes:
- vouloir modifier un tableau dans une fonction et en avoir le retour, seule solution passer une adresse,
- ici, on a affaire à un tableau à 2 dimensions, et la fonction doit donc en connaître le nombre d'éléments dans une ligne, sinon il est incapable de situer correctement l'élément d'un tableau.
Donc la solution est de passer: char map[][50].
Cette notation signifie: map est un pointeur sur un tableau de type 'char' et de 50 éléments.
Bonne continuation.
Contraintes:
- vouloir modifier un tableau dans une fonction et en avoir le retour, seule solution passer une adresse,
- ici, on a affaire à un tableau à 2 dimensions, et la fonction doit donc en connaître le nombre d'éléments dans une ligne, sinon il est incapable de situer correctement l'élément d'un tableau.
Donc la solution est de passer: char map[][50].
Cette notation signifie: map est un pointeur sur un tableau de type 'char' et de 50 éléments.
Bonne continuation.
Bonjour, cs-bilou
lupius t'a donné la bonne indication, mais vu ta déclaration avec trois étoiles (au michelin ?), je me permet de te joindre ce code d'exemple (qui fonctionne compilé avec gcc)
J'ai rajouté des null en fin de ligne pour pouvoir utiliser printf et strlen
bon courage !
lupius t'a donné la bonne indication, mais vu ta déclaration avec trois étoiles (au michelin ?), je me permet de te joindre ce code d'exemple (qui fonctionne compilé avec gcc)
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define TAILLE_LIGNE 50
void level(char tab[][TAILLE_LIGNE],int nbi,int nbj);
int main(int argc, char *argv[])
{
char map[10][TAILLE_LIGNE];
level(map, 10, TAILLE_LIGNE);
for (int i = 0; i < 10;++i)
{
printf("%s\n",map[i]);
}
exit(0);
}
void level(char tab[][TAILLE_LIGNE],int nbi,int nbj)
{
// Commence par initialiser toutes les lignes du tableau avec des blancs
for (int i = 0; i < nbi;++i)
{
memset(tab[i],' ', nbj);
// Si on veut que les chaînes soient null terminated, on ajoute :
*(tab[i] + nbj -1) = '\0';
}
// Attention, strlen et printf ne marchent que si la chaîne est null terminated
printf("Taille ligne %d du tableau : %d\n", 0, strlen(tab[0]));
// Pour les 5 premières lignes du tableau, je veux metre des #
// de la 10ieme à la 40 ieme colonne
for (int i = 0; i < 5;++i)
{
memset(tab[i]+9,'#', 31);
}
// De la 23ieme ligne à la 27ieme ligne (lignes 22 à 26)
// On met le signe - dans la 10ieme colonne (colonne 9)
for (int j = 22; j < 27;++j)
{
*(tab[9]+j) = '-';
}
}
J'ai rajouté des null en fin de ligne pour pouvoir utiliser printf et strlen
bon courage !