Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2332 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  ostringtream.str().c_str() ??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

ostringtream.str().c_str() ??

n°569572
blackgodde​ss
vive le troll !
Posté le 18-11-2003 à 11:37:51  profilanswer
 

Bonjour,
 
j'ai un petit truc qui m'a perturbé :  
 

Code :
  1. std::ostringstream odest;
  2. odest << "test";
  3. const char* cstr1 = odest.str().c_str(); // ca ne fonctionne pas
  4. string s = odest.str();
  5. const char* cstr2 = s.c_str(); // ca fonctionne


 
voila, je n'arrive pas a comprendre ?


---------------
-( BlackGoddess )-
mood
Publicité
Posté le 18-11-2003 à 11:37:51  profilanswer
 

n°569580
blackgodde​ss
vive le troll !
Posté le 18-11-2003 à 11:44:13  profilanswer
 

ah, c'est un probleme de portée de l'objet temporaire string créé entre odest.str() et .c_str() qui a été détruit de suite apres l'appel => le pointeur cstr1 est devenu invalide, est-ce exact ?


---------------
-( BlackGoddess )-
n°569588
Kristoph
Posté le 18-11-2003 à 11:46:23  profilanswer
 

BlackGoddess a écrit :

ah, c'est un probleme de portée de l'objet temporaire string créé entre odest.str() et .c_str() qui a été détruit de suite apres l'appel => le pointeur cstr1 est devenu invalide, est-ce exact ?


 
C'est probablement ça en effet.

n°569650
Taz
bisounours-codeur
Posté le 18-11-2003 à 12:42:30  profilanswer
 

c'est ça
 
écris alors
 
  const string &s( odest.str() );
  const char* cstr2 = s.c_str(); // ca fonctionne

n°569743
blackgodde​ss
vive le troll !
Posté le 18-11-2003 à 13:29:04  profilanswer
 

ah, oui, ca evite une 2eme copie si j'ai bien compris, merci :)


---------------
-( BlackGoddess )-
n°570175
Dag elg
Posté le 18-11-2003 à 19:45:56  profilanswer
 

Ca marche avec le gcc 2.95 de cygwin.

n°570191
Taz
bisounours-codeur
Posté le 18-11-2003 à 20:08:08  profilanswer
 

eh ?

n°570212
Dag elg
Posté le 18-11-2003 à 21:14:56  profilanswer
 

Je me demande donc si d'un compilateur a l'autre la notion de portee d'objet temporaire change.

n°570271
blackgodde​ss
vive le troll !
Posté le 18-11-2003 à 22:47:21  profilanswer
 

peut-etre a l'execution la zone de mémoire qui etait réservé pour l'objet temporaire n'a pas été écrasée et est toujours lisible ?


---------------
-( BlackGoddess )-
n°570276
schnapsman​n
Zaford Beeblefect
Posté le 18-11-2003 à 22:53:37  profilanswer
 

BlackGoddess a écrit :

peut-etre a l'execution la zone de mémoire qui etait réservé pour l'objet temporaire n'a pas été écrasée et est toujours lisible ?


 
c'est sale  :o


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
mood
Publicité
Posté le 18-11-2003 à 22:53:37  profilanswer
 

n°570318
Dag elg
Posté le 18-11-2003 à 23:44:05  profilanswer
 

quand tu dis que ca ne fonctionne pas est ce que tu as une erreur a la compilation ou bien est ce le resultat qui est faux?

n°570319
schnapsman​n
Zaford Beeblefect
Posté le 18-11-2003 à 23:44:52  profilanswer
 

dag elg a écrit :

quand tu dis que ca ne fonctionne pas est ce que tu as une erreur a la compilation ou bien est ce le resultat qui est faux?


 
ça compile forcément [:spamafote]


---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
n°570541
blackgodde​ss
vive le troll !
Posté le 19-11-2003 à 11:15:48  profilanswer
 

oui, c'est le réultat qui est eronné, et ca crash en aval (a l'execution)


---------------
-( BlackGoddess )-

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  ostringtream.str().c_str() ??

 

Sujets relatifs
Plus de sujets relatifs à : ostringtream.str().c_str() ??


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)