begin process at 2012 02 12 17:36:27
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Divers

 > 

Débutant(e)

 > 

Problème avec les flux


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec les flux

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

Membre Club
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ée dans : problème, texte, txt, flux, str


Répondre à ce message

Sujets en rapport avec ce message

C++ et fichier texte [ par olobo ] bonjour ! j'ai besoin d'aide pour 2 problème svp [^^happy13] [u]Problème 1 [/u] Voila j'aimerais pouvoir lire les ligne d'un fichier texte qui est FTP et fichiers [ par cobra176 ] j'ai créer un programme qui recherche des mots clée et affiche les lignes qui les contint dans des fichiers log qui eux sont contenu dans un serveur f sprintf en c [ par tahsgh ] Bonjour, j'ai un problème, la fonction 'sprintf(buf3,"readelf -S %s>readelfdoc.txt",name);' ne fait pas la redirection du résultat de la commande au f Modification virgule fichier .txt [ par necromoine ] Bonjour, je souhaite faire un code qui permet de mettre un retour à la ligne apres chaque virgule d'un fichier texte, qui ressemblerait à : Contenu t Problème capture texte [ par oceax ] Bonjour,voilà j'aimerais enregistrer le contenu d'une editbox d'une application annexe.Je dipose du handle de ma boite de dialogue, de l'iD de mon con fichier texte [ par boiron ] bonjourje dois copier un fichier texte (file1.txt) dans un autre fichier texte (merge.txt) en format ascii et je dois ensuite ajouter à la suite du te problème fichier texte (ofstream) taille ? [ par baby3378 ] Bonjour à tous, voila, j'ai repri il y a quelque temps la base d'une source qui listait tous les fichiers d'un repertoire. Jusque là aucun souci. Cep Problème de comprehension de programme... [ par Fathilde ] Bonjour à tous,Dans le cadre de mon stage je dois faire un programme en C++ (à l'aide de Borland C++) pour identifier des tags RFID, j'utilise pour ce problème listBox [ par ezzineahmed ] salut, j'utilise visuel 2008, j'ai fait un bouton qui fait le calcul et il enregistre le resultat dans un fichier, je veut ouvrir et ecrire le contenu problème de fond d'écran et zone de texte "noirs" [ par taurticolye ] Bonjour, J'ai développé un projet en c++; tout fonctionne bien sous windows xp...mais problème sous windows 7 (sur un portable); en fait, tous les fo


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,640 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales