Accueil > Forum > > > > string.h, c_str() & char*
string.h, c_str() & char*
jeudi 5 janvier 2006 à 22:17:15 |
string.h, c_str() & char*

MyXiLo
|
Bonjour,
Il y a un petit quelque chose que je ne comprends pas avec les std::string de string.h
std::string Pouet="LALALALa"; printf("%s", Pouet.c_str()); Va afficher LALALALa, de meme que printf("%s", (char *) Pouet.c_str());
Cependant, ce qui suit n'affiche rien: char* Zou=(char *)Pouet.c_str(); printf("%s", Zou); Le code fonctionne mais le printf n'affiche rien. Ce que je ne comprends evidement pas. Si quelqu'un sait répondre a cette question relativement penible je me tiens a l'ecoute. Thomas.
|
|
jeudi 5 janvier 2006 à 23:02:37 |
Re : string.h, c_str() & char*

cosmobob
|
salut, le pointeur que te délivre .c_str() n'est assuré d'etre valide qu'au moment du retour de cette fonction. En gros, rien ne garantit que string maintienne un tableau de char terminé par un 0, dont tu te souviens du début en le mettant dans une variable. ton exemple montre que c'est pas le cas. Si une fonction f renvoie un objet de class A, qui a un opérateur de conversion automatique vers les char*, alors char* t = f(); va compiler. mais ton objet A en retour de f va disparaitre a la ligne suivante et ton pointeur t ne sera plus valide. ca doit, au vu de ton petit code, etre ce qui se passe pour std::string::c_str() a+ 
|
|
jeudi 5 janvier 2006 à 23:05:08 |
Re : string.h, c_str() & char*

cosmobob
|
tiens d'ailleurs vas voir la: http://c.developpez.com/faq/bcb/?page=donneeschaines on peut y lire:
Attention ! La méthode c_str retourne un pointeur sur une
chaîne C, qui n'est valable que pour l'instruction suivant l'appel à
c_str. En d'autres termes, vous ne pouvez pas faire ceci :
AnsiString Src = "Source.txt"; AnsiString Dest = "Destination.txt"; char * pSrc = Src.c_str(); char * pDest = Dest.c_str(); // instructionsCopyFile(pSrc,pDest,true); En effet, au moment où CopyFile est exécutée, pSrc et pDest pointent sur un emplacement mémoire dont le contenu est indéfini. Il se peut très bien que la mémoire ait été écrasée entre les instructions c_str et l'appel à CopyFile. Ce ne sera pas toujours le cas, et le programme peut très bien fonctionner parfaitement pendant très longtemps, et planter de façon aléatoire... Pour résoudre ce problème, il faut utiliser la fonction strcpy : AnsiString Src = "Source.txt"; AnsiString Dest = "Destination.txt"; char * pSrc = new char[Src.Length()+1]; // +1 pour le 0 terminal char * pDest = new char[Dest.Length()+1]; strcpy(pSrc,Src.c_str()); strcpy(pDest,Dest.c_str()); // instructions CopyFile(pSrc,pDest,true); delete[] pSrc; delete[] pDest;
a + 
|
|
vendredi 6 janvier 2006 à 09:46:27 |
Re : string.h, c_str() & char*

Joky
|
C'est pour ça qu'il faut jamais retourner un pointeur :)
C'est caca if(!Meilleur("Joky")) return ERREUR;<
|
|
vendredi 6 janvier 2006 à 22:46:54 |
Re : string.h, c_str() & char*

Kaid
|
1- On parle ici d'un objet string de la STL qui n'a rien à voir avec l'objet Borland AnsiString. 2- Tant que tu n'effectues aucune opération qui modifie l'objet string, le pointeur que tu as récupéré via la méthode c_str() est toujours valide. 3- Le type de retour de la méthode c_str() est const char* que tu castes en char*. Si ce pointeur est constant c'est qu'il y a une raison, faire un cast pour le "supprimer" indique une erreur dans la conception de ton code. 4- Ton problème ne vient t'il pas tout simplement d'un oubli de retour-charriot ? Essayes printf("%s\n", Zou)Kaid - kaid.fr.st
|
|
Cette discussion est classée dans : string, printf, str, char, pouet
Répondre à ce message
Sujets en rapport avec ce message
conversion string et char, probleme [ par flowneo ]
Bonjour, soit le code suivant, qui convertit une chaine string en char: #include #include #include using namespace std; int main (){ string com
problème probablement lié aux références [ par fanfanfx ]
Bonjour, je galère depuis quelques jours sur un bout de code. Pour être bref voici le code qui marche ne marche pas: [code=cpp]void maFonction(const
Convertir unsigned char en string^ [ par elise42 ]
Bonjour à tous, je code en C++ et je cherche à convertir un unsigned char Buffer_Envoi en un string ^Trame. Quelqu'un aurait il une idée? Merci d'a
Etendre std::string(char *) pour utiliser nos references de char[] a l'interne [ par ebeaumier ]
Bonjour,Je dois appeler une API externe qui ne prend que des "const string &" et nous utilisons a l'interne des char[].Est-il possible d'étendre la cl
Pointeurs [ par rourou2030 ]
Salut à tous,j'ai des lacunes concernants les pointeurs.En fait voici mon problème:Soitunsigned char *dataunsigned char *bufferest ce que l'appelle
String et char [ par lektrosonic ]
Bonjour,Peut on extraire un char souhaite d'un string ?Mercil3KTr0 Was HeRe
Serialiser une std::map (sans utiliser Boost) [ par tom24 ]
Bonjour,voila pour un projet, je dois sérialiser en binaire des objets. Mes objets comprennent des string, mais aussi une map, et je ne sais pas vraim
La class string [ par jderf ]
Je suis débutant et je teste la class string. Voici un code tous simple, mais y'a un probleme de conversion à la compil que je ne comprend pas. Les er
fread & fwrite [ par mosted ]
Bonjour, Etant débutant , j'ai un soucis avec un code à faire pour l'école. Nous devons lire des structures d'un fichier binaire. Voici mon code [c
Livres en rapport
|
Derniers Blogs
L'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIESL'INTERFACE NATURELLE DE WINDOWS PHONE 7 SERIES par odewit
La tendance est aux interfaces naturelles (NUI), et le keynote de Bill Buxton au MIX l'a bien souligné.
La charte graphique et ergonomique de Windows Phone 7 a donc été entièrement repensée en vue d'obtenir un maximum d'efficacité sur ce point. En re...
Cliquez pour lire la suite de l'article par odewit COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|