ostringtream.str().c_str() ??

ostringtream.str().c_str() ?? - C++ - Programmation

Marsh Posté le 18-11-2003 à 11:37:51    

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 )-
Reply

Marsh Posté le 18-11-2003 à 11:37:51   

Reply

Marsh Posté le 18-11-2003 à 11:44:13    

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 )-
Reply

Marsh Posté le 18-11-2003 à 11:46:23    

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.

Reply

Marsh Posté le 18-11-2003 à 12:42:30    

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

Reply

Marsh Posté le 18-11-2003 à 13:29:04    

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


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

Marsh Posté le 18-11-2003 à 19:45:56    

Ca marche avec le gcc 2.95 de cygwin.

Reply

Marsh Posté le 18-11-2003 à 20:08:08    

eh ?

Reply

Marsh Posté le 18-11-2003 à 21:14:56    

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

Reply

Marsh Posté le 18-11-2003 à 22:47:21    

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 )-
Reply

Marsh Posté le 18-11-2003 à 22:53:37    

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!"
Reply

Marsh Posté le 18-11-2003 à 22:53:37   

Reply

Marsh Posté le 18-11-2003 à 23:44:05    

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?

Reply

Marsh Posté le 18-11-2003 à 23:44:52    

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!"
Reply

Marsh Posté le 19-11-2003 à 11:15:48    

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


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed