Passage d'un double tableau à une fonction C

Bonjour,
Je tente de faire passer un double tableau à une fonction, mais ça bug, voici le code :

#include <stdio.h> 
#include <stdlib.h> 

void printLab (int lab[][], int x, int y); 

int main () 
{ 
    int i;     
    int lab[20][20] = {1,1,1,1,1,1,1,1,1,1,1,1}; 
   
    printLab(lab, 20, 20); 
    system ("PAUSE");  
    return 0; 
} 

void printLab (int lab[][], int x, int y) 
{ 
     int i, j; 
      
     for(i=0; i<x; ++i) 
           for(j=0; j<y; ++i) 
                    printf("%d", lab[x][y]);  // <== ici ca bug 
      
}

Dev C++ me dit "22 main.c invalid use of array with unspecified bounds "

Pouvez-vous m'aider ?

5 réponses

  1. Contributeur
    Bonjour,

    Juste par rapport au message initial, l'erreur est très simple et classique.

    void printLab (int lab[][], int x, int y);
    Le compilateur ne sait pas gérer le pointeur lab puisqu'il ne connait pas la dimension des colonnes. Il faut donc juste mettre int lab[][20] dans le prototype. Et ça marchera.

    Tiens-nous au courant.

    Cdlt,
    3
    1. Ca marche comme ça ! Merci beaucoup
      0
  2. Modérateur
    Essayes comme ceci...

    #include <stdio.h>
    #include <stdlib.h>
    
    #define XMAX 20
    #define YMAX 20
    
    void printLab(int *lab)
    {
    	int x,y;
    	for(x=0; x<XMAX; x++)
    	{
    		for(y=0; y<YMAX; y++)
    			printf("%d\t",lab[y+x*YMAX]);
    		printf("\n");
    	}
    }
    
    int main ()
    {   
        int lab[XMAX][YMAX];
    
        int x,y;
        for(x=0; x<XMAX; x++)
        for(y=0; y<YMAX; y++)
        {
    		printf("tab[%d][%d] = ",x,y);
    		scanf("%d",&lab[x][y]); 
        }
        
        printLab(*lab);
        system("PAUSE");	
        return 0;
    }
    2
    1. t'as essayé ca :

      void printLab (int lab[][], int x, int y)
      {

      for(int i=0; i<x; i++)
      {
      for(int j=0; j<y; j++)
      printf("%d", lab[i][j]); // <== ca bug toujours?
      }

      }

      J'ai fait i++ car de 0 jusqu'a taille-1, on a tous les elements du tableau. Et avant d'afficher, faudrait penser d'abord à remplir le tableau.

      void printLab (int lab[][], int x, int y)
      {
      for(int i=0; i<x; i++)
      {
      for(int j=0; j<y; j++)
      {
      printf("Donner tab[%d][%d], i,j");
      scanf("%d", &tab[i][j]);
      }
      }

      for(int i=0; i<x; i++)
      {
      for(int j=0; j<y; i++)
      printf("%d", lab[i][j]); // <== ca bug toujours?
      }

      }

      ou si tu preferes, tu peux faire la saisie dans le programme principale (main) et afficher grâce à la fonction ou saisir et afficher en même temps grâce à la fonction comme ci haut décrit. tout depend de toi

      Dieu n'a fait qu'ébaucher l'homme, c'est sur terre que chacun se crèe
      0
      1. Après correction de quelques bugs, mon nouveau code bug toujours au même endroit :

        #include <stdio.h>
        #include <stdlib.h>
        
        void printLab (int lab[][], int x, int y);
        
        int main ()
        {
            int i, j;    
            int lab[20][20] = {0};
          
            for(i=0; i<20; i++) 
            {   
                for(j=0; j<20; j++) 
                { 
                      printf("Donner tab[%d][%d]", i,j); 
                      scanf("%d", &lab[i][j]); 
                } 
            }
            
            printLab(lab, 20, 20);
            system ("PAUSE");	
            return 0;
        }
        
        void printLab (int lab[][], int x, int y)
        {
             int i, j;
             
             for(i=0; i<y; i++) {
                   for(j=0; j<x; j++)
                            printf("%d", lab[i][j]);
                   printf("\n");
             }
        }
             
        0
        1. au lieu de int lab[20][20] = {0}; essaie de faire seulement int lab[20][20]; c'est à dire sans initialiser le tableau à 0. je sais plus quel element mais t'as initialier 1 element du tableau donc enlève et essaie
          0
        2. conseil: quand une boucle contient plus d'une instruction, utilise les accolades.
          0
      2. Bon j'ai réussi à le faire marcher en changeant le prototype de printLab en corrigeant int lab[][] par int **lab mais maintenant que je lance le programme, j'ai le droit a "laby.exe à rencontrer un problème et doit fermer", une idée ?

        Le nouveau code (j'ai virer l'initialisation dans la boucle et mit ça direct au début parce que c'était chiant de tout le temps le retaper)
        #include <stdio.h>
        #include <stdlib.h>

        void
        printLab (int **lab, int x, int y);

        int
        main ()
        {
        int i, j, x = 4, y =4;
        int lab[4][4] = {1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1};

        printLab(lab, 20, 20);
        system ("PAUSE");
        return 0;
        }

        void
        printLab (int **lab, int x, int y)
        {
        int i, j;

        for(i=0; i<y; i++) {
        for(j=0; j<x; j++)
        printf("%d", lab[i][j]);
        printf("\n");
        }
        }
        0
        1. Petit problème reglé, j'ai enlevé les 20 en argument de printLab et mit les bonnes valeurs, mais ça plante toujours
          0
        2. essaie encore de changer le nom du tableau dans le programme et celui dans la fonction

          void
          printLab (int **lab1, int x, int y);

          int main ()
          {
          int i, j, x = 4, y =4;
          int lab[4][4] = {1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1};

          printLab(lab, 4, 4);
          system ("PAUSE");
          return 0;
          }

          void printLab (int **lab1, int x, int y)
          {
          int i, j;

          for(i=0; i<y; i++) {
          for(j=0; j<x; j++)
          printf("%d", lab1[i][j]);
          printf("\n");
          }
          }
          0