Copie de tableau char**

Signaler
Messages postés
46
Date d'inscription
mercredi 9 novembre 2005
Statut
Membre
Dernière intervention
12 janvier 2012
-
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
-
Bonjour à tous,

J'aurai aimé savoir quelle était la meilleur façon de copier un tableau char** dans un autre tableau char** ?


Pour le moment je parcours mon 1er tableau et je recopie chaque contenu dans l'autre tableau de cette manière :


char** strMonNouveauTableau = (char **)malloc(NbLigne*sizeof(char*));


for(int i=1 ; i<NbLigne;i++)  
{
 strMonNouveauTableau[i] = (char *) malloc(100*sizeof(char));   // j'alloue de l'espace pour les éléments, 100 caractères
 memcpy( strMonNouveauTableau[i] , strMonAncienTableau[i], 100);                // je copie le contenu de mon 1er tableau dans mon nouveau tableau
}




Y aurait-il une meilleure façon de faire ??


Merci.

2 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
Oui il y a une meilleur façon : n'allouer qu'un bloc de mémoire par tableau :

// allocation de l'ancien tableau
char** pAncienTableau=(
char**)malloc(NbLignes*100*
sizeof(
char)+NbLignes*
sizeof(
char*));

for(
int i=0;i<NbLignes;i++) pAncienTableau[i]=(
char*)pAncienTableau+NbLignes*
sizeof(
char*)+100*
sizeof(
char)*i;

// ... traitement sur pAncienTableau
pAncientableau[1][3]=10;

// allocation du nouveau tableau
char** pNouveauTableau=(
char**)malloc(NbLignes*100*
sizeof(
char)+NbLignes*
sizeof(
char*));

for(
int i=0;i<NbLignes;i++) pNouveauTableau[i]=(
char*)pNouveauTableau+NbLignes*
sizeof(
char*)+100*
sizeof(
char)*i;

// copie (très simple du coup)
memcpy(pNouveauTableau+NbLignes,pAncienTableau+NbLignes,100*
sizeof(
char));

// libération de toute la mémoire (très simple aussi)
free(pAncienTableau);
free(pNouveauTableau);

ca prend peut-être plus de place (encore que...) mais c'est plus rapide à l'exécution.
Messages postés
416
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
19 décembre 2013
2
Bonjour ,

tu as char** tablo1 et char** tablo2;
si ils ont les meme dimensions MxN alors tu as

char*  ptr1 =( (char*)tablo1 - 1),   *ptr2 =( (char*)tablo2 - 1);
for(long decompte = MxN; --decompte>=0;) *++ptr2 = *++ptr1;

Salut
je suis heureux de faire partie d'une grande famille ...!