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

SL & STL C++ Discussion :

convertir un char * en std::string


Sujet :

SL & STL C++

  1. #1
    Membre du Club
    Inscrit en
    Juin 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 116
    Points : 50
    Points
    50
    Par défaut convertir un char * en std::string
    bonjour je souhaite convertir un char * en std::string. Je vais voir dans la FAQ et je procède de la même manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char * tempStr = NULL;
    tempStr = "test";
    std::string tempStdString(tempStr);
    à l'execution mon std::string est vide... Comment cela se fait ?

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    the Truth is somewhere else. *




    (*la Vérité est ailleurs.)

  3. #3
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    euhh moi je dirais que ces lignes la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char * tempStr = NULL;
    tempStr = "test";

    doivent etre transformées en ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char * tempStr = NULL;
    strcpy(tempStr,"test");
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  4. #4
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Citation Envoyé par hiko-seijuro
    euhh moi je dirais que ces lignes la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char * tempStr = NULL;
    tempStr = "test";
    doivent etre transformées en ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char * tempStr = NULL;
    strcpy(tempStr,"test");
    beau plantage en perspective ...
    tempStr pointe sur rien ...
    tu recopies donc "test" sur une adresse null ,ça fera boum

  5. #5
    Membre du Club Avatar de Seandest
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Doubs (Franche Comté)

    Informations forums :
    Inscription : Avril 2006
    Messages : 54
    Points : 67
    Points
    67
    Par défaut
    Citation Envoyé par hiko-seijuro
    euhh moi je dirais que ces lignes la

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char * tempStr = NULL;
    tempStr = "test";

    doivent etre transformées en ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char * tempStr = NULL;
    strcpy(tempStr,"test");
    Hum ... faut pas faire une petite allocation mémoire avant le strcpy ?
    Dans ce genre là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char * tempStr = NULL;
    tempStr = new char[strlen("test") + 1];
    strcpy(tempStr,"test");

  6. #6
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Citation Envoyé par bigboomshakala
    the Truth is somewhere else. *




    (*la Vérité est ailleurs.)
    je reformule : "le problème n'est pas là, les 3 lignes de code données sont correctes."

  7. #7
    Membre expert
    Avatar de hiko-seijuro
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    2 011
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 2 011
    Points : 3 065
    Points
    3 065
    Par défaut
    vi j'avais oublié l'allocation dsl :s
    Hiko-seijuro

    n'cha - hoyoyo gang

    espace perso : http://hiko-seijuro.developpez.com
    dernier tuto : Introduction à l'éditeur de texte Emacs sous linux
    consulter les faqs : http://www.developpez.com/faq
    PAS DE QUESTIONS TECHNIQUES PAR MP OU MAIL

  8. #8
    mat.M
    Invité(e)
    Par défaut
    qu'est ce que c'est que ces complications !
    ne pas chercher midi à 14heures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    std::string str;
    char *szNullTerminatedString="Hello World";
    str="Hello World";
    Et c'est tout !

    Si tu veux utiliser plusieurs strings prendre std::vector ou std::list
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    std::vector <std::string> liste_string ;
    std::string str="MFC rulez";
    liste_string.push_back(str); 
    ///////
    for(int i=0;i<liste_string.size();i++)
    cout<<liste_string[i];

  9. #9
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    MAT.M dis:
    Code :
    std::string str;
    char *szNullTerminatedString="Hello World";
    str="Hello World";

    Et c'est tout !
    heu...y'a un prob doc moi je vois les choses plutot comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::string str;
    char *szNullTerminatedString;
    szNullTerminatedString=new char[stlen("Hello World")+1];
    strcpy(szNullTerminatedString,"Hello World");
    str=szNullTerminatedString;

  10. #10
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::string str;
    char *szNullTerminatedString;
    szNullTerminatedString=new char[stlen("Hello World")+1];
    strcpy(szNullTerminatedString,"Hello World");
    str=szNullTerminatedString;
    merci de poster des choses utiles. je ne vois pas l'intérêt de polluer le forum avec des codes à 2 francs 6 sous

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour clarifier les choses...

    1- std::string possède un constructeur qui prend en paramètre un const char*, donc ceci est tout à fait valide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::string Str = "Salut";
    2- Si vous voulez stocker la chaîne dans un char* au préalable sans allouer de la mémoire, la seule syntaxe possible est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    const char* CStr = "Salut";
    std::string Str = CStr;
    Car "Salut" est une chaîne littérale potentiellement dans une zone mémoire en lecture seule.

    3- Cette question n'a aucun rapport avec Visual C++ (sujet déplacé)

  12. #12
    Membre confirmé

    Inscrit en
    Juin 2005
    Messages
    1 155
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 1 155
    Points : 475
    Points
    475
    Par défaut
    bigboomshakala dis:
    merci de poster des choses utiles. je ne vois pas l'intérêt de polluer le forum avec des codes à 2 francs 6 sous
    ressures moi, entre
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* c;
    c=new char [strlen("dynamique")+1];
    strcpy(c,"dynamique");
    il y'a une difference???

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Oui.

    Le premier est incorrect (même si ça peut fonctionner), le second est inutilement compliqué.

Discussions similaires

  1. Conversion const char* vers std::string
    Par scheme dans le forum C++
    Réponses: 4
    Dernier message: 21/09/2010, 11h02
  2. Convertir un char[] en une String
    Par Adorien dans le forum Langage
    Réponses: 3
    Dernier message: 08/04/2010, 12h05
  3. convertir un CString en std::string
    Par azamharir dans le forum MFC
    Réponses: 1
    Dernier message: 04/04/2008, 08h36
  4. Problème Cast char* en std::string
    Par inovah dans le forum SL & STL
    Réponses: 1
    Dernier message: 30/10/2007, 16h32
  5. convertir un char* en std::basic_string
    Par gronaze dans le forum SL & STL
    Réponses: 8
    Dernier message: 30/06/2006, 15h17

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