string->const char* pas ok en mode debug

string->const char* pas ok en mode debug - C++ - Programmation

Marsh Posté le 21-07-2005 à 16:30:20    

Bonjour,
je suis sous vc6 et j'ai le problème suivant:
en mode release une chaine de caractere s'affiche correctement, mais pas en mode debug!!!
 
code:

[#8dff00]
 
main.cpp
 
#include "Test.h"
 
#include <string>
using std::string;
 
Test::Test()
{
}
 
Test::~Test()
{
}
 
const char* Test::display()
{
 std::string request="bonjour tout le monde!!!";
 return request.c_str();
}
 

Test.cpp

 
#include "Test.h"
 
#include <string>
using std::string;
 
Test::Test()
{
}
 
Test::~Test()
{
}
 
const char* Test::display()
{
 std::string request="bonjour tout le monde!!!";
 return request.c_str();
}
 
[[]i]Test.h[/i]
 
#include <iostream>
 
 
class Test{
 
public:
 
 Test();
 ~Test();
 const char* display();
 
};

[/#000ef0][/]
 
Resultat en release:
 
bonjour tout le monde!!!
Press any key to continue
 
Resultat en Debug:
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
Press any key to continue

 
 
Excusez ma nullité, mais quelqu'un pourrais t'il m'expliquer pourquoi et comment faire marcher en Debug?

Reply

Marsh Posté le 21-07-2005 à 16:30:20   

Reply

Marsh Posté le 21-07-2005 à 16:32:15    

Je recommence !

Reply

Marsh Posté le 21-07-2005 à 16:38:33    

Bonjour,
je suis sous vc6 et j'ai le problème suivant:
en mode release une chaine de caractere s'affiche correctement, mais pas en mode debug!!!
 
[]code:
 
Test.h
#include <iostream>
 
 
class Test{
 
public:
 
 Test();
 ~Test();
 const char* display();
 
};

 
 
 
Test.cpp
 
#include "Test.h"
 
#include <string>
using std::string;
 
Test::Test()
{
}
 
Test::~Test()
{
}
 
const char* Test::display()
{
 std::string request="bonjour tout le monde!!!";
 return request.c_str();
}
 
 
main.cpp
#include "Test.h"
 
int main()
{
 Test* test = new Test();
 const char* disp = test->display();
 std::cout<<disp<<std::endl;
 
 delete test;
 return 0;
}[/]

 
 
Maintenant les résultats:
 
Mode release:
bonjour tout le monde!!!
Press any key to continue

 
Mode Debug:
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
Press any key to continue

 
 
 
Quelqu'un peut t'il m'expliquer pourquoi la chaine est correcte en release et pas en debug?  :heink:  
Et me dire comment faire marcher dans les 2 modes ?

Reply

Marsh Posté le 21-07-2005 à 16:57:21    

utilise les balises [cpp]

Reply

Marsh Posté le 21-07-2005 à 17:06:52    


Un truc + présentable (jspr ke c la bonne!!) :
 
Bonjour,
je suis sous vc6 et j'ai le problème suivant:
en mode release une chaine de caractere s'affiche correctement, mais pas en mode debug!!!
 
[#0046b8]code:
 

Code :
  1. Test.h
  2. #include <iostream>
  3. class Test{
  4. public:
  5. Test();
  6. ~Test();
  7. const char* display();
  8. };


 
 
Test.cpp

Code :
  1. #include "Test.h"
  2. #include <string>
  3. using std::string;
  4. Test::Test()
  5. {
  6. }
  7. Test::~Test()
  8. {
  9. }
  10. const char* Test::display()
  11. {
  12. std::string request="bonjour tout le monde!!!";
  13. return request.c_str();
  14. }


 
main.cpp
 

Code :
  1. #include "Test.h"
  2. int main()
  3. {
  4. Test* test = new Test();
  5. const char* disp = test->display();
  6. std::cout<<disp<<std::endl;
  7. delete test;
  8. return 0;
  9. }


 
Maintenant les résultats:
 
Mode release:
 
bonjour tout le monde!!!
Press any key to continue
 
Mode Debug:
 
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
Press any key to continue
 
 
 
Quelqu'un peut t'il m'expliquer pourquoi la chaine est correcte en release et pas en debug?  :heink:  
Et me dire comment faire marcher dans les 2 modes ?

Reply

Marsh Posté le 21-07-2005 à 17:08:10    

RTFM
 
elle te dit quoi la doc de c_str() ?
 

Code :
  1. char*
  2. Utils::string_dup(const std::string &s)
  3. {
  4.   char *cstr;
  5.   cstr = new char[s.size() + 1];
  6.   s.copy(cstr, std::string::npos);
  7.   cstr[s.size()] = '\0';
  8.   return cstr;
  9. }

Reply

Marsh Posté le 21-07-2005 à 17:14:39    

tu peux aussi éditer tes messages avec les petites images situées au-dessus, au lieu de les recopier à chaque fois [:petrus75]

Reply

Marsh Posté le 21-07-2005 à 17:15:28    

Désolé Taz, je pige pas ta langue... :(  
 

Taz a écrit :

RTFM
 
elle te dit quoi la doc de c_str() ?
 

Code :
  1. char*
  2. Utils::string_dup(const std::string &s)
  3. {
  4.   char *cstr;
  5.   cstr = new char[s.size() + 1];
  6.   s.copy(cstr, std::string::npos);
  7.   cstr[s.size()] = '\0';
  8.   return cstr;
  9. }



Reply

Marsh Posté le 21-07-2005 à 17:19:40    

Ok merci, je m'en souviendrais [:aurelie22]
 

theshockwave a écrit :

tu peux aussi éditer tes messages avec les petites images situées au-dessus, au lieu de les recopier à chaque fois [:petrus75]


Reply

Marsh Posté le 21-07-2005 à 17:20:01    

Citation :

elle te dit quoi la doc de c_str() ?


 
:o

Reply

Marsh Posté le 21-07-2005 à 17:20:01   

Reply

Marsh Posté le 21-07-2005 à 17:27:49    

theshockwave a écrit :

Citation :

elle te dit quoi la doc de c_str() ?


 
:o


 
 :sweat: pige toujours pas
 
Je fais pas partie de votre monde, moi!  :fou:  
Je serais pas venu sur ce forum poser cette question si j'etais pas nul à ch**
 
j'ai besoin qu'on me parle français  :cry:  

Reply

Marsh Posté le 21-07-2005 à 17:28:35    

December a écrit :

Désolé Taz, je pige pas ta langue... :(


 
plus simplement poses-toi la question: "quelle est la durée de vie de ma string ?"

Reply

Marsh Posté le 21-07-2005 à 17:32:33    

on te dit de lire la documentation ... c'est pas trop compliqué, non plus ...

Reply

Marsh Posté le 21-07-2005 à 17:33:44    

même sans la doc, il y a un feeling général à avoir sur ce genre de choses....


Message édité par bjone le 21-07-2005 à 17:34:02
Reply

Marsh Posté le 21-07-2005 à 17:36:05    

December a écrit :

j'ai besoin qu'on me parle français  :cry:


 
 
Euh, Taz t'a filé la méthode à utiliser toute cuite, y a plus qu'à recopier.  :heink:  
 
Si tu ne comprends pas ce qu'il t'a donné, et si tu ne comprends pas le concept de durée de vie, alors tu devrais arrêter ce que tu es en train de faire, lire un bon livre de C++ avec exercices simples, et revenir sur ce problème plus tard.
 
Parce que là, maintenant, tout ce que tu réussiras à faire, c'est de la tambouille qui ne fonctionnera pas.

Reply

Marsh Posté le 21-07-2005 à 17:37:30    

on s'calme, il doit être en train de réfléchir sur la question  :wahoo:

Reply

Marsh Posté le 21-07-2005 à 17:39:01    

bjone a écrit :

on s'calme, il doit être en train de réfléchir sur la question  :wahoo:


 
Je ne dis pas ça sur le ton du reproche, bien au contraire.
Je pense vraiment qu'il vaut mieux remettre le problème à plus tard le temps de mieux connaître les mécanismes de base du C++.
 
C'est tout. :)

Reply

Marsh Posté le 21-07-2005 à 17:42:07    

oué enfin tu peux obtenir le même genre de blague rien qu'en C...
 
petit exo December, c'est quoi le problème avec:
 

Code :
  1. int *test()
  2. {
  3.     int a=8;
  4.     return &a;
  5. }
  6. meiinne()
  7. {
  8.     int d, *v;
  9.     v=test();
  10.     d=*v;
  11. }


Message édité par bjone le 21-07-2005 à 17:42:44
Reply

Marsh Posté le 21-07-2005 à 17:56:32    

Merci les gars d'avoir bien voulu éclairer ma minuscule (voire quasi inexistante lanterne)!!
 
Bon je vais surement vous faire (encore!) rigoler mais j'ai pas besoin de faire delete[] ?

Code :
  1. int main()
  2. {
  3. Test* test = new Test();
  4. const char* disp = test->display();
  5. std::cout<<disp<<std::endl;
  6. delete test;
  7. return 0;
  8. }


Code :
  1. const char* Test::display()
  2. {
  3. std::string s="bonjour tout le monde!!!";
  4.    char *cstr;
  5.    cstr = new char[s.size() + 1];
  6.    s.copy(cstr, std::string::npos);
  7.    cstr[s.size()] = '\0';
  8.    return cstr;
  9. }

Reply

Marsh Posté le 21-07-2005 à 17:58:17    

si
 
Edit : C'est pour ca que cette méthode est à éviter en règle générale. Je suppose que l'exemple suggéré était là surtout pour mettre le problème en relief et te faciliter sa compréhension et sa résolution


Message édité par theshockwave le 21-07-2005 à 17:59:24
Reply

Marsh Posté le 21-07-2005 à 19:13:36    

theshockwave a écrit :

si
 
Edit : C'est pour ca que cette méthode est à éviter en règle générale. Je suppose que l'exemple suggéré était là surtout pour mettre le problème en relief et te faciliter sa compréhension et sa résolution


 
Et comment je fais delete[] dans mon exemple ci-dessus alors? [:aurelie22]

Reply

Marsh Posté le 21-07-2005 à 19:57:28    

la question n'est pas "comment" mais "quand".

Reply

Marsh Posté le 21-07-2005 à 19:59:41    

bjone a écrit :

la question n'est pas "comment" mais "quand".


oui quand?

Reply

Marsh Posté le 21-07-2005 à 20:48:00    

quand tu n'en as plus besoin ?

Reply

Marsh Posté le 22-07-2005 à 00:28:10    

même quand j'y mets de la bonne volonté, je suis pas récompensé ... pitoyable.
 
 
Bon dernier conseil :
- n'utilise pas c_str(), n'utilise pas les char*
- apprend le C++

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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