
Envoyé par
kanigoo
1 2 3 4 5 6 7 8 9
| class MaClasse
{
public:
const char* MaClasse::MaFonction (const char* chaine1 ,const char* chaine2)
{
string chaine3 = string(chaine1) + string(chaine2);
return (chaine3.c_str());
}
}; |
ça marche pas avec const char* et ça marche avec string.
Pouvez-vous me dire ou est-ce que ça cloche ?
Je debute en c++ et il y a surement un truc basic qui m'echappe...
Quelqu'un peut-il m'expiquer ?

Je peux essayer...
return (chaine3.c_str());
C'est à ne surtout pas faire...
En fait, ta fonction renvoie un pointeur sur une zone mémoire gérée par l'objet chaine3. Mais cet objet (chaine3) est local à la fonction... Il est donc détruit au moment où tu la quitte.
Donc ton pointeur n'est plus valide... Et tu te retrouves avec un comportement indéterminé.
Pour le résultat que tu as obtenu, quand tu stocke le retour de ta fonction dans une string, il y a tout de suite conversion (la string stocke la chaîne pointée dans son propre espace mémoire), donc la zone pointée est toujours 'correcte' (mais c'est du bol). Par contre, si tu stocke juste l'adresse de la zone (en utilisant un const char *), c'est la cata...
Dans ton cas, tu as de la chance (si on peut dire ça), l'adresse est probablement réutilisée lors du deuxième appel à ta fonction, et c'est pour ça que tes deux const char * renvoient la même chose.
Partager