Tableau 2 dimensions en paramètre

kiboumz Messages postés 120 Date d'inscription mercredi 17 septembre 2003 Statut Membre Dernière intervention 18 mai 2007 - 6 avril 2005 à 02:25
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011 - 8 avril 2005 à 00:43
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

NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
6 avril 2005 à 03:08
#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 ::.)~
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
6 avril 2005 à 09:10
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
0
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
6 avril 2005 à 13:57
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
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
7 avril 2005 à 01:29
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 ::.)~
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
7 avril 2005 à 09:07
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.
0
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
8 avril 2005 à 00:43
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 ::.)~
0
Rejoignez-nous