Redimensionner tableau dynamque

Fermé
g30 - 8 janv. 2009 à 23:26
togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009 - 9 janv. 2009 à 00:06
Bonjour,

je souhaite representer un nombre sous le forme d'un tableau de char

char * tab = new char[5]; // exemple pour un nombre de 5 chiffre

mais si je veux mettre un plus grand nombre (disont par exemple qu'il contiendra le resultat de sa multiplication par un autre nombre) , pour l'instant je crée juste un autre tableau ayant la nouvelle taille et je copie 1 à 1 les éléments

char * copieTab = new char[6];
for(int i=0;i<taille;i++)
copieTab[i] = tab[i];
tab = copieTab;

n'y aurait il pas une manière plus rapide ?

ps: dans ma manière pour le redimensionnement dois faire un delete[] tab (avant l'assignation du pointeur ?)

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
8 janv. 2009 à 23:45
Salut,
Oui, tu dois désallouer puisqu'il est possible que tu pointes ailleurs avec new char.
N'oublie pas de rajouter encore une case pour stocker '\0' en fin de tableau.
Pour copier, un tableau dans un autre, tu peux utiliser strncpy au lieu de faire avec la boucle for.

Sinon, tu peux faire beaucoup plus simple en utilisant la classe String ;)
0
On peut utiliser memcpy, à savoir:
char * tab = malloc (5 * sizeof(char));
char * copieTab = malloc (6 * sizeof(char));
memcpy (copieTab, tab, 5*sizeof(char));
Evidemment le 6ème élément n'est pas initialisé.
Sinon il existe realloc qui donnerait:
char * tab = malloc (5 * sizeof(char));
if ( (copieTab = realloc (tab, 6 * sizeof(char))) == NULL)
   exit (1);
0
togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009 8
9 janv. 2009 à 00:00
C'est pas du c.
C'est du c++ pourquoi ne pas utiliser un objet string?
0
togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009 8 > togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009
9 janv. 2009 à 00:06
sinon
//xcar
car=new char[strlen(xcar)+1];
et
strcpy(car,xcar);

Je me corrige un peu
0