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 :

Convertion pointeur tableau de char EN string


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2012
    Messages
    28
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 28
    Par d�faut Convertion pointeur tableau de char EN string
    Bonsoir,

    la FAQ n'a pas la r�ponse � mon probl�me.
    Il s'agirais de faire ceci :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    // Init. 
    string chaine;
    char* pc = new char[35];
     
    flux.read(pc, 35); // Lecture de 35 octet d'un fichier
    chaine = string(*reinterpret_cast<string*>(pc)); // Conversion pc en string
    Evidement �a ne marche pas... Mais l'id�e est l�. �a fonctionne pour des int, des double... mais pas pour des string.
    J'ai pu voir sur un site :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    chaine = string str(pc);
    Fonctionne ? Merci pour vos r�ponses !

  2. #2
    Membre tr�s actif

    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par d�faut
    Bonsoir,

    les constructeurs de la classe std::string sont clairs =>click<=

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    string (const char* s);
    string (const char* s, size_t n);
    Pour la lecture dans un fichier, n'oublie pas d'utiliser le standard C++ (et pas C), si jamais ce n'est pas d�j� ce que tu fais : click (ifstream)

    Et utiliser reinterpret_cast est un dernier recours, que tu devrais utiliser tr�s peu de fois dans ta vie de programmeur, � �viter absolument tant que c'est possible, car dangereux.

  3. #3
    Membre actif
    Homme Profil pro
    �tudiant
    Inscrit en
    Septembre 2012
    Messages
    28
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : �tudiant
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 28
    Par d�faut
    Le "const" n'est pas probl�matique? Car la fonction "read" accept un char* et non un const char*.
    Concernant le "reinterpret_cast" je n'ai pas trouv� d'autre moyen pour traduire des octets en entier, double...

  4. #4
    Membre tr�s actif

    Homme Profil pro
    �tudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Par d�faut
    Non ce n'est pas probl�matique, cela veut juste dire que le pointeur n'est pas modifiable. Mais il y a moyen de faire de toute fa�on plus simple, sans manipuler des types primitifs comme le char*

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    #include <iostream>
    #include <fstream>
    #include <string>
     
    using namespace std;
     
    int main()
    {
        ifstream inputFileStream;
        inputFileStream.open("test.txt");
        string name;
        getline(inputFileStream,name);
        cout << name;
     
        return 0;
    }
    Avec un fichier text.txt, contenant du texte, ceci fonctionne (attention pas test�, mais � mon avis cela manque de tests pour �viter tout plantage).

  5. #5
    Membre Expert
    Avatar de white_tentacle
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    1 505
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 505
    Par d�faut
    Par rapport au code initial, il y a aussi un autre probl�me, c�est que la cha�ne n�est pas n�cessairement termin�e par un \0, donc il faut bien utiliser le constructeur qui prend un size_t.

    Pour ce qui est du reinterpret_cast, c�est � �viter de mani�re g�n�rale. Convertir un tableau de char[4] en entier n�cessite de savoir l�endianness qu�on utilise. Et si on est au sein d�un tableau plus grand (par exemle, � l�index 2 d�un tableau de 8) c�est pire car il y a potentiellement des probl�mes d�alignement qui font que le reinterpret_cast va planter sur certaines architectures (et sur les autres, ce sera lent).

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    D�cembre 2010
    Messages
    734
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : D�cembre 2010
    Messages : 734
    Par d�faut
    Citation Envoy� par radlabo94 Voir le message
    Le "const" n'est pas probl�matique? Car la fonction "read" accept un char* et non un const char*.
    Non, au contraire:
    • Il est normal que la fonction read exige un char* et non un const char*, car elle MODIFIE le contenu point�
    • Une fonction qui prend un param�tre const acceptera parfaitement un param�tre de type non const, car le const signifie simplement qu'elle s'engage (v�rifi� par le compilateur) � ne pas modifier le contenu du param�tre
    • La seule chose qui poserait probl�me ce serait de d�clarer un const char* et le passer � read. Dans ce cas tu aurais une erreur de compilation, car on ne peut passer une r�f�rence constante � une fonction qui souhaite modifier se valeur


    Citation Envoy� par radlabo94 Voir le message
    Concernant le "reinterpret_cast" je n'ai pas trouv� d'autre moyen pour traduire des octets en entier, double...
    Pour ajouter ma couche � la tr�s juste r�action de white_tentacle, tu es � la merci du moindre d�tail d'impl�mentation qui peut diff�rer entre le producteur et le consommateur du fichier, parce que le reinterpret_cast ordonne au compilateur "ferme les yeux et consid�re que les octets � partir de l'adresse point�e sont les donn�es internes, priv�es, de la variable". Donc sauf si tu es s�r que les octets en question sont un dump brut de l'�tat interne d'une variable fait par le m�me runtime, ton code cesse d'�tre valide � cette ligne. Au mieux tu vas avoir une valeur aberrante dans ta nouvelle variable, mais tu peux m�me te retrouver � cr�er deux variables ou plus qui se chevauchent en m�moire avec des effets de bord incompr�hensibles...bref...
    On enfonce peut-�tre des portes ouvertes mais ta fa�on de remplacer l'appel au constructeur de string par un reinterpret_cast me fait plut�t penser qu tu ne ma�trise pas ces notions...

Discussions similaires

  1. [D�butant] Convertir un tableau de char en string
    Par Ludovic_R_37 dans le forum VB.NET
    R�ponses: 2
    Dernier message: 29/08/2013, 17h14
  2. transformer un tableau de char en string puis en float?
    Par maf.mouton dans le forum D�buter
    R�ponses: 8
    Dernier message: 30/04/2009, 13h34
  3. Convertion d'un String en tableau de char.
    Par elephant13 dans le forum Windows Forms
    R�ponses: 2
    Dernier message: 07/02/2008, 19h01
  4. tableau de char vers string hexa
    Par andromeda dans le forum Entr�e/Sortie
    R�ponses: 4
    Dernier message: 22/07/2007, 23h10
  5. [Debutant]String en tableau de char
    Par amel2006 dans le forum Collection et Stream
    R�ponses: 6
    Dernier message: 05/03/2006, 10h33

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