Modifier la taille d'un char* en C++

Fermé
silentData Messages postés 183 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 18 octobre 2013 - Modifié par silentData le 19/01/2011 à 09:05
scaravenger Messages postés 2678 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 30 janvier 2015 - 19 janv. 2011 à 11:59
Bonjour,

Moi qui suit à fond java, dès le moment où je dois retoucher le C++ et ses pointeurs, je m'en sort plus :'(

Voilà donc mon problème :

Je crée une classe String avec un attribut char* s qui représente la chaîne de caractère.

J'ai créé une méthode setSize() pour redimensionner la taille de ma chaîne... Cependant, je n'arrive pas à la faire fonctionner... Voici mon code actuel :


void String::setSize(int size){  
   char *tmp = new char[size+1]; //Je crée une chaine temp. avec la nouvelle taille  
   strcpy(tmp, this->s); //Je copie la valeur actuelle de la chaîne  
   delete[] this->s; //Je désalloue mon attribut  
   this->s = new char[size+1]; //Je redéfini l'attribut à la bonne taille  
   strcpy(this->s, tmp); //Je copie la valeur de la chaîne temporaire dans l'attribut  
}



Est-ce que qqun pourrait m'aider ?

Merci :)

3 réponses

scaravenger Messages postés 2678 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 30 janvier 2015 625
19 janv. 2011 à 09:37
As tu dimensionné ou initialisé ton char* s avant l'appel de setSize()?
Quel message d'erreur obtiens tu?
0
silentData Messages postés 183 Date d'inscription jeudi 22 janvier 2009 Statut Membre Dernière intervention 18 octobre 2013 40
19 janv. 2011 à 09:45
Oui, il est bien initialisé au début et utilisé...

Je n'ai pas de message d'erreur, mais la valeur et la taille de s ne change pas...

J'ai essayé d'y aller pas-à-pas, mais au moment où je fais this->s = new char[size+1]; la taille de s n'a pas changé...
0
scaravenger Messages postés 2678 Date d'inscription mercredi 28 mai 2008 Statut Membre Dernière intervention 30 janvier 2015 625
19 janv. 2011 à 11:59
Comment vérifies tu la taille de s?
Quand tu fais
strcpy(tmp,this->s );
puis
strcpy(this->s ,tmp);
je crois que la longueur de s sera limitée par le caractère nul "\0"
Doinc inchangée
Mais n'empêche pas l'espace alloué d'être plus grand.
0