Tableau 2 dimensions en paramètre

Signaler
Messages postés
120
Date d'inscription
mercredi 17 septembre 2003
Statut
Membre
Dernière intervention
18 mai 2007
-
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011
-
Bonjour, j'aimerais savoir comment passer un tableau de char 2
dimensions dans les paramètres d'une fonction et qu'elle saurait
l'appel.



Par exemple;



char Nom[10][20];



void AppelTab(parametre?)



AppelTab(Parametre?);



Merci

a+

6 réponses

Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

#include <stdio.h>

#include <string.h>



#define _ITEM_SIZE (20)



void AppelTab( char cTab[][_ITEM_SIZE], size_t uNbItem )

{

size_t i;



/* copie `uNbItem` fois le mot `Bonjour` dans le tableau */

for ( i = 0; i < uNbItem; ++i )

{

strcpy( cTab[i], "Bonjour" );

}

}



int main()

{



size_t i;

char tab[10][_ITEM_SIZE];



AppelTab( tab, 10 ); /* `rempli` le tableau */



/* ensuite on l'affiche(tous les items/chaines) */

for ( i = 0; i < 10; ++i )

{

printf("item %u: %s\n", i, tab[i] );

}



return 0;

}




~(.:: NitRic ::.)~
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Yep,

Le plus simple à faire reste encore de passer un pointeur sur un tableau comme parametres.

Exemple:



int MyFunc( char *myTab[])

{

...

return 0;

}


Ainsi, en initialisant ton pointeur comme il le faut, ca t'évitera d'avoir des problèmes de bord.


Shell
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
tu peux également directement spécifier

void AppelTab(char**
Nom
)



AppelTab(char**
Nom
);



mais pense bien à initialiser correctement tes variables si tu be veux pas de pb d'allocation



exemple

que tes 10 chaines soitent initialisées à 0 pr commencer....



++

Nono
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

DeAtHCrAsH:

int MyFunc( char * myTab[], size_t uNbItem )

{

size_t i;

for ( i = 0; i < uNbItem; ++i )

{

strcpy( myTab[i], "Bonjour" );

}

return i;

}



magic_Nono:

void AppelTab( char ** Nom, size_t uNbItem, size_t uMaxItemSize )


{


size_t i;


for ( i = 0; i < uNbItem; ++i )


{


strncpy( Nom[i], "Bonjour", uMaxItemSize );


}


}



il est toujours préférable de connaître les dimenssions des `tableaux` ...

personnellement, j'utiliserais la méthode de `magic_Nono` ...




~(.:: NitRic ::.)~
Messages postés
1878
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
16 mars 2011
1
Bj NitRic





il est toujours préférable de connaître les dimensions des `tableaux` ,
c'est vrai, mais on peux faire sans, et je pensais plutot a qqch avec
le strcpy et non strncpy : ou alors un strncpy sur min(strlen(...),uMaxItemSize )



sinon, pour l'utilisation :


void utiliseTab( char ** Nom, size_t uNbItemMax )



{



size_t i;



for ( i = 0; i < uNbItemMax && Nom[i] ; i++ )



puts( Nom[i] );

}



voir mm sans transmettre le uNbItemMax qui est une constante.

++

Nono.
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

Oui, tout à fait mais moi je ferais plutôt:



void utiliseTab( char ** Nom, size_t uNbItem )

{

size_t i;

for ( i = 0; i < uNbItem; ++i )

{

if ( NULL != Nom[i] ) /* il peut très bien y avoir quelques items à NULL ... */

puts( Nom[i] );

}

}



Mais tout dépend du type de tableau, ce qu'il contient, son utilité, etc ...




~(.:: NitRic ::.)~