IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Durée de vie d'une chaîne de caractères.


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut Durée de vie d'une chaîne de caractères.
    Bonjour tout le monde.

    En bref :
    Je crée une classe MyString dont le constructeur prend une chaîne de caractères.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int main(){
    	MyString test("lalala");
    	test.print();
    }
    Question :
    Combien de temps est diponible la chaîne de caractères "lalala"?
    Le temps de l'appel au constructeur?
    Ou tant qu'on est dans la fonction main?

    Merci d'avance pour votre aide.

    PS : le code:
    test.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #include "MyString.h"
     
    int main(){
    	MyString test("lalala");
    	test.print();
    }
    Mystring.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class MyString{
    public :
    MyString(const char* str);
    void print();
    private :
    const char* mystr;
    };
    MyString.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include "MyString.h"
    #include <iostream>
    using namespace std;
     
    MyString::MyString(const char* str) : mystr(str){}
     
    void MyString::print(){
    	cout<<mystr<<endl;
    }

  2. #2
    Membre confirmé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 096
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 096
    Points : 633
    Points
    633
    Par défaut
    salut,

    En faite ta chaine de caractère "lalala" n'est disponible que le temps de l'appel du constructeur.
    Donc, là, tu assignes l'adresse de la chaine "lalala" qui sera detruite lorsque tu quitteras ton constructeur.
    Il faudrait plutot faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MyString::MyString(const char * str)
    {
         mystr = new char[strlen(str)+1];
         strcpy(mystr, str);
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2010
    Messages : 8
    Points : 10
    Points
    10
    Par défaut
    Ok j'ai compris.
    Merci pour la réponse rapide et efficace Flob91 !!!

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour

    Sans être fausse, la solution de Flob91 me semble pas être ce qu'il y a de mieux en général (c'est du code style C et non C++, ce qui n'est pas forcement une bonne habitude à prendre)

    Il est préférable d'utiliser des chaines C++ : std::string (voir la FAQ)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MyString::MyString(const std::string & str) : mystr(str)
    {
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Saisie et affichage d'une chaîne de caractères
    Par sali dans le forum Assembleur
    Réponses: 2
    Dernier message: 31/03/2004, 18h01
  3. [Debutant(e)] Analyse d'une chaîne de caractères
    Par maire106 dans le forum Langage
    Réponses: 6
    Dernier message: 22/03/2004, 15h04
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo