Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème avec les flux [ Divers / Débutant(e) ] (nisaloncaje)

samedi 8 juillet 2006 à 18:29:19 | Problème avec les flux

nisaloncaje

Bonjour, j'ai le code suivant :

struct txt{
const char* texte;

};


int main(){
stringstream message,message2;
int var1=5,var2=7;
txt txtniv;

message<<"numero ";
message<<var1;
txtniv.texte=message.str().c_str();
cout<<txtniv.texte<<endl;
message2<<"voici le ";
message2<<var2;
txtniv.texte2=message2.str().c_str();
cout<<txtniv.texte<<endl;
cout<<txtniv.texte2<<endl;}

Cependant, je ne comprend pas pourquoi, ce qui s'affiche sur la console est :
voici le 7
voici le 7

alors que ca devrait etre
numero 5
voici le 7

Comment faire pour obtenir cela ?

Merci d'avance


samedi 8 juillet 2006 à 18:39:28 | Re : Problème avec les flux

laurent1024

Peut etre a cause du const dans la structure
struct txt{
const char* texte;};
Essaye en enlevant le const
++

samedi 8 juillet 2006 à 19:51:36 | Re : Problème avec les flux

nisaloncaje

non ca ne change rien

(le nouveau code source est :
#include <fstream>
#include <cstdlib>
#include <iostream>
#include <sstream>


using namespace std;

struct txt{
char *texte;
char *texte2;

};


int main(){
stringstream message,message2;
int var1=5,var2=7;

txt txtniv;

message<<"numero ";
message<<var1;
txtniv.texte=(char*)message.str().c_str();

message2<<"numero ";
message2<<var2;
txtniv.texte2=(char*)message2.str().c_str();

cout<<txtniv.texte<<endl;
cout<<txtniv.texte2<<endl;

system("PAUSE");
}


dimanche 9 juillet 2006 à 01:02:16 | Re : Problème avec les flux

luhtor

Tu programmes avec DevCpp ? On dirait un bug. Le programme a pas le meme comportement sous DevCpp et VC express.

J'ai fais tourner ce programme:
message<<"numero ";
message<<var1;
txtniv.texte=(char*)message.str().c_str();

message2<<"numero ";
message2<<var2;
txtniv.texte2=(char*)message2.str().c_str();

cout<<(long)txtniv.texte<<endl;
cout<<(long)txtniv.texte2<<endl;
cout<<(long)message.str().c_str()<<endl;
cout<<(long)message2.str().c_str()<<endl;
cout<<message.str().c_str()<<endl;
cout<<message2.str().c_str()<<endl;
cout<<txtniv.texte<<endl;
cout<<txtniv.texte2<<endl;


Et j'obtiens ca sous devcpp:
4013788
4013788
4013788
4013788
numero 5
numero 7
numero 7
numero 7
Appuyez sur une touche pour continuer...

C'est donc totalement délirant.

Sous visual:
1244276
1244316
1244356
1244396
numero 5
numero 7


Appuyez sur une touche pour continuer...

Donc je pige PAS DU TOUT.


dimanche 9 juillet 2006 à 02:27:00 | Re : Problème avec les flux

Hylvenir

J'ai essayé avec gcc et VC 2005, j'obtiens les mêmes problèmes avec le simple code suivant :

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
ostringstream message( "Chaine quelconque" );
cout << message.str() << endl;
cout << message.str().c_str() << endl;
const char* tmp = message.str().c_str();
cout << tmp << endl;
}


le problème viendrait de str() qui renvoit un objet temporaire std::string, dont on récupère l'adresse de la chaine interne par c_str(). Cet objet est détruit juste après l'affectation à tmp.
tmp pointe ensuite sur une zone ou il n'y a plus rien pour le cout qui suit (le debug sous VC2005 indique un pointeur invalide)

Le seul moyen que j'ai pour le moment pour t'éviter le problème est d'utiliser simplement std::string.

par exemple
string tmpStr = message.str();
const char* tmp = tmpStr.c_str();
fonctionne.


dimanche 9 juillet 2006 à 09:36:10 | Re : Problème avec les flux

luhtor

Oue en effet, j'avais pas pensé a ca, j'ai été voir sur le doc, c'est bien un objet temporaire qui est retourné. Donc pas d'autre solution que de récupérer en string ou de créer un buffer de copier les données dedans.



dimanche 9 juillet 2006 à 11:51:51 | Re : Problème avec les flux

nisaloncaje

ok merci, mais j'ai besoin que ce soit en char* car après c'est traité dans une fonction (qui affiche le texte à l'écran, voir tutorial de Nehe n°43), est ce qu'une conversion est possible ?

dimanche 9 juillet 2006 à 12:46:37 | Re : Problème avec les flux

Hylvenir

Dans ce tuto, ils utilisent déjà les std::string.
Tu devrais pouvoir utiliser de std::string dans ta struct.
et lors de l'appel à la fonction (glPrint ou freetype::print)
faire la conversion à ce moment par .c_str()
Je n'ai pas vu de fonction prenant directement une struct de 2 char* directement ?



Cette discussion est classé dans : problème, texte, txt, flux, str


Répondre à ce message

Sujets en rapport avec ce message

Problème de fonctions [ par sebastienbro ] Voilà, j'ai créé une fonction Cryptage qui renvoi un type long pr savoir si il y a une erreur ou pas.J'aimerais savoir comment faire pour que la fonct extraction d'un texte dans un fichier *.txt [ par sir51 ] bonjour, je suis etudiant, et je debute le c++. J'ai un DM a rendre .Sujet :extraire un champ texte dans un fichier txt prealablement creé... Help!!! Probleme de variable avec GetDlgItem [ par akaras ] Bonjour à tous,Voilà, je debute en c++. Venant du monde du php c'est asse different. Je commence avec des exemples tres simpe, ici j'aimerai d'un cham lire plusieurs lignes ?.txt [ par michelmt ] Salut !Voici mon prob.je réussi a écrire a partire d'un édite box vers un fichiertexte (txt),sur plusieurs lignes ,mais quand je veut la liredans ce m [débutant][OpenGL] Problème affichage texture + texte [ par Bornibus ] Bonjour, voici mon problème : J'ai défini une sous-fenêtre (c'est juste un détail) et un rectangle dedans auquel j'applique une texture. Jusque l Problème de structure et de fprintf [ par Chap71 ] Bonjour!!Je voudré savoir comment afficher le contenu de ma structure dans un .txtVoici ma structure:struct Planete {  char NomPlanete[15+1];  char Pr isoler des nombres dans un fichier texte [ par playmo420 ] SalutJ'ai un (gros) probleme avec un fichier texte presente de la maniere suivante :(1,3,1)(2,3,5)(2,5,10)(2,1,10)(2,4,4)...Il faut que je reussisse a [C++ / commdlg.h] Répertoire courant OPENFILENAME [ par GrosTony ] Salut @ tous,Dans le cadre d'un projet en cours, je doit gérer des enregistrements et chargement de fichier et je n'arrive pas à changer le répertoire Prb de stockage fichier texte [ par Jarod1980 ] Bonjour tout le monde,Voilà j'ai un problème dans mon programme. Je voudrais ouvrir un fichier texte et stocker son contenu dans une variable. Le prob Lire et écrire un fichier .txt avec du C [ par Hkz ] Bonjours a tousJ'ai codé un programme qui code du texte, mais pour l'instant il faut lui rentrer le texte par le clavier se qui n'est pas très pratiqu


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,468 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.