Redimensionner tableau dynamque

g30 -  
togodo Messages postés 155 Statut Membre -
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 ?)
A voir également:

2 réponses

fiddy Messages postés 11653 Statut Contributeur 1 847
 
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
loupius
 
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 155 Statut Membre 8
 
C'est pas du c.
C'est du c++ pourquoi ne pas utiliser un objet string?
0
togodo Messages postés 155 Statut Membre 8 > togodo Messages postés 155 Statut Membre
 
sinon
//xcar
car=new char[strlen(xcar)+1];
et
strcpy(car,xcar);

Je me corrige un peu
0