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 :

Initialisation et affichage d'un buffer.


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut Initialisation et affichage d'un buffer.
    Salut!

    J'impl�mente une classe fichier mais j'ai des probl�mes pour afficher un fichier bufferis�:
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    class fichier{
    public:       string path;//adresse absolue du fichier
                  fstream file;
                  char *buffer;
                  int sizeofbuffer;
     
                  fichier(string s):path(s),file(NULL){}//constructeur
     
                  void open(){
                              file.open(path.c_str());
                              }
     
                  void bufferize(int n){
                                         buffer=new char;          
                                         file>>buffer;
                                         sizeofbuffer=n;                                      
                                         }
     
                  void printbuffer(){
                                     for(int i=0;i<sizeofbuffer;i++){
                                             cout<<buffer[i];
                                             }
                                     }
     
                              };
    Voil� le main:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(int argc, char *argv[])
    {
     
    fichier f("C:/a.txt");
    f.open();
     
    cout<<f.file.is_open()<<endl;
     
    f.bufferize(100);
    f.printbuffer();
    Ca compile,le test "f.file.is_open()" me renvoie 1 indiquant que le fichier est correctement ouvert,mais l'appel � la m�thode "printbuffer()" m'affiche des signes qui n'ont rien � voir avec le fichier.

    Le probl�me est s�rement � l'initialisation de "buffer";j'ai essay� avec un "buffer" constant: sans faire d'allocation dynamique mais le probl�me demeure.

    Merci de votre aide.

  2. #2
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     void bufferize(int n){ 
                                         buffer=new char;          
                                         file>>buffer; 
                                         sizeofbuffer=n;                                      
                                         }
    :
    Ne serait-ce pas plut�t :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     void bufferize(int n){ 
                                         buffer=new char[ n ];          
                                         file>>buffer; 
                                         sizeofbuffer=n;                                      
                                         }

  3. #3
    Membre �clair� Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par d�faut Re: Initialisation et affichage d'un buffer.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
                  void bufferize(int n){
                                         buffer=new char;          
                                         file>>buffer;
                                         sizeofbuffer=n;                                      
                                         }
    D�ja ton new char alloue 1 seul octet de m�moire... Si tu veux allouer un tableau de 100 il faut ecrire :
    buffer = new char[n];

    Ensuite je trouve cette ligne bizard :
    file>>buffer;
    ca n'est pas la bonne m�thode pour remplir un buffer selon moi

    Enfin pour finir :
    sizeofbuffer=n;
    Meme si dans l'absolue cela fonctionne, je pense qu'il existe des m�thodes plus �l�gantes.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Merci de vos r�ponses mais le probl�me demeure.

    Cependant je croyais que "new char[n]" renvoyait "un pointeur sur un tableau de n caractere" alors que ici il renvoie "un pointeur sur un caract�re":"char *buffer".
    De m�me que:
    est invalide mais:
    est bon;car "new int" renvoie "un pointeur sur un entier" et pas un entier.

    Quel est donc le fonctionnement de "new"?

    Merci.

  5. #5
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut
    1 - je ne crois pas que fstream prenne NULL � la construction.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
      fichier( const string& s) : path(s)
      {} //constructeur
    devrait suffire.
    NB : passage d'objet par ref constante, plus �conomique que par copie

    2 - la ligne lit dans m_file jusqu'� tomber sur un s�parateur (blanc, tabulation, saut de ligne, etc...).
    Si ton buffer fait 100 caract�res, que le premier item fait moins de 100 caract�res et que le buffer n'a pas �t� initialis� proprement, alors il peut se passer pas mal d'octets avant qu'on ne tombe sur un 0 terminal...

    3 - un new renvoie un pointeur sur le type demand�. Donc :
    new int renvoie un int*
    new char[10] un char* pointant au d�but d'une zone allou�e pour 10 char
    new double[956] un double* pointant au d�but d'une zone allou�e pour 956 doubles
    etc...

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Merci de ces conseils.

    J'ai fait des modifications mais il ne m'affiche que le premier caract�re du fichier,les autres n'ayant rien � voir.

    Quelle est la bonne m�thode pour copier un fichier dans un tableau ou un autre conteneur facilement manipulable?

  7. #7
    Membre �clair� Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par d�faut
    en complement de ce que te dit Herode je te conseille d'utiliser la fonction

    file.read (buffer,n);

    Pour lire ton fichier... Cela peux eviter des erreurs de segmentation si la zone � lire est sup�rieur � la taille de ton buffer.

  8. #8
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    En effet avec la m�thode "read(...)" il affiche sans probl�me le contenu du fichier.

    En fait plus car le buffer est trop grand;d'ailleurs quelle est la m�thode pour d�terminer la taille du fichier?

  9. #9
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut
    L'op�rateur >> fonctionne pour les fichiers texte ASCII. Si tu as un fichier binaire, il faut le lire en mode binaire (cf. Higestromm)

    NB : si tu as un fichier Unicode, UTF8 ou autre codage sur >1 octet... je ne sais plus, mais �a devrait se compliquer. Le sujet a �t� �voqu� dans un fil il n'y a pas tr�s longtemps, je crois.

    Quelle est la bonne m�thode pour copier un fichier dans un tableau ou un autre conteneur facilement manipulable?
    Si tu veux le lire d'un coup, tu peux passer �r des bytearrays que tu tron�onnes et transtypes apr�s � la vol�e. C'est rapide et remarquablement casse-gueule d�s que la situation se complique
    Sinon, tu peux utiliser std::copy sur un std::vector par exemple. Ou faire toi m�me la boucle � la main.

  10. #10
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    L'op�rateur >> fonctionne pour les fichiers texte ASCII.
    C'est un fichier texte notepad.
    C'est bien de l'ASCII?

  11. #11
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut
    Oui. Ca devrait donc fonctionner.

  12. #12
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Merci � tous.

  13. #13
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Citation Envoy� par seriousme
    L'op�rateur >> fonctionne pour les fichiers texte ASCII.
    C'est un fichier texte notepad.
    C'est bien de l'ASCII?
    Encodage 8bits, oui probablement. ASCII cela d�pendra de ce que tu y mets. Au premiers caract�re accentu� tu sors de la table ASCII (limit� � 127 caract�res!), et dans mes souvenirs notepad a la facheuse habitude d'encoder en OEM (CP-850 sous nos tropiques). Cela serait compatible avec la console de windows, mais pas avec celles en iso-8859-1 (aka latin1) (/15 <-> latin 9).

    Bref, de toutes fa�ons tu t'y prends mal. Cf ton autre topic o� l'on te montre le chargement avec rdbuf() signal� dans la FAQ.

    PS: pour ce qui est d'utiliser >> pour lire des fichiers utf-8 ou autres, le probl�me est un chouilla plus complexe et peut demander des code convertion facets. boost.serialize et adobe.ASL (adam&eve) en fournissent, ou alors il y a des techniques plus manuelles, ou encore des lib � IHM.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 3
    Dernier message: 27/10/2013, 20h14
  2. Ordre affichage mauvais & Z-Buffer activ�
    Par gladek dans le forum OpenGL
    R�ponses: 11
    Dernier message: 04/10/2012, 17h06
  3. [VB.NET]Affichage d'un buffer SerialPort
    Par Yolak dans le forum Windows Forms
    R�ponses: 28
    Dernier message: 10/07/2007, 11h25
  4. affichage dans le front buffers ne marche pas!
    Par jamal24 dans le forum OpenGL
    R�ponses: 3
    Dernier message: 22/08/2003, 19h14
  5. Affichage en passant par un buffer...
    Par Sirotilc dans le forum MFC
    R�ponses: 5
    Dernier message: 27/05/2002, 21h00

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