Modifier la taille d'un char* en C++
silentData
Messages postés
201
Statut
Membre
-
scaravenger Messages postés 2691 Date d'inscription Statut Membre Dernière intervention -
scaravenger Messages postés 2691 Date d'inscription Statut Membre Dernière intervention -
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 :
Est-ce que qqun pourrait m'aider ?
Merci :)
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
-
As tu dimensionné ou initialisé ton char* s avant l'appel de setSize()?
Quel message d'erreur obtiens tu? -
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é... -
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.