[C] Fonction Pointeur + char a double tableau

cs-bilou Messages postés 769 Date d'inscription   Statut Membre Dernière intervention   -  
 java4ever -
Bonjour,
Je suis en train de faire un jeux, le casse brique.
J'ai créé un char a double tableau pour les abscisse et ordonnée.
map[10][50]

Je voudrait bien initialiser mon tableau pour le level 1, j'ai essayer sa:

void level(char*** map)
{
     int i,j;
     for (i = 0 ; i < 10 ; i++)
        for (j = 0 ; j < 50 ; j++)
            *map[i][j] = ' ';
    
    for (i = 0 ; i < 5 ; i++)
        for (j = 9 ; j < 40 ; j++)
            *map[i][j] = '#';
    for (i = 22 ; i < 27 ; i++)
        *map[9][i] = '-';
}


Mais quand je tape level(map);.
Boom erreur avec envoyer ou pas rapport.
Je ne sais pas du tout comment faire.
J'ai trouver que vue que c'était un char a double tableau il fallait mettre ** et un autre pour le pointeur.
Enfin c'est le bordel, je comprend plus rien.

Si quelqu'un a une solution, je suis preneur.

Bilou.
A voir également:

2 réponses

loupius
 
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.
1
java4ever
 
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)
#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 !
0