Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1533 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Chaînes dynamiques

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Chaînes dynamiques

n°421432
_Lyghur_
Posté le 09-06-2003 à 14:39:22  profilanswer
 

Je débute en C++ et je suis en train d'essayer de lire des chaînes de tailles variables dans un fichier avec fstream. Et j'ai un petit problème : à chaque fois que j'initialise le buffer de lecture, il fait tout le temps 4 caractères de plus que ce que je mets. Je fais comme ça :
 

Code :
  1. // .... (Récupération de tailleChaine, ouverture du fichier...)
  2. // .....
  3. char * buffer = new char[tailleChaine]; // ça marche mais il y a 4 caractères en trop :(
  4. gFile.read((char *) buffer, tailleChaine);


 
Vous voyez ce qui ne va pas ? :?:

mood
Publicité
Posté le 09-06-2003 à 14:39:22  profilanswer
 

n°421489
corpsegrin​der
Posté le 09-06-2003 à 15:22:13  profilanswer
 

Post plus de code...  
 
 :bounce:

n°421490
chrisbk
-
Posté le 09-06-2003 à 15:23:54  profilanswer
 

Code :
  1. char * buffer = new char[tailleChaine];
  2. memset(buffer,0,tailleChaine);
  3. gFile.read((char *) buffer, tailleChaine);


Message édité par chrisbk le 09-06-2003 à 15:24:03
n°421509
Taz
bisounours-codeur
Posté le 09-06-2003 à 15:49:37  profilanswer
 

ok. tu penses quoi de
 

Code :
  1. string mot, ligne;
  2. fichier >> mot;
  3. getline(fichier, ligne);

n°421511
Taz
bisounours-codeur
Posté le 09-06-2003 à 15:50:08  profilanswer
 

chrisbk a écrit :

Code :
  1. char * buffer = new char[tailleChaine];
  2. memset(buffer,0,tailleChaine);
  3. gFile.read((char *) buffer, tailleChaine);



festival de C  :pfff:    [:tomtom75]

n°421516
chrisbk
-
Posté le 09-06-2003 à 15:55:15  profilanswer
 

++Taz a écrit :

festival de C  :pfff:    [:tomtom75]  


je me contente de modifié le code existant pour que ca colle avec le reste sans aller chercher plus loin

n°421517
_Lyghur_
Posté le 09-06-2003 à 15:55:17  profilanswer
 

chrisbk a écrit :

Code :
  1. char * buffer = new char[tailleChaine];
  2. memset(buffer,0,tailleChaine);
  3. gFile.read((char *) buffer, tailleChaine);




 
Ca ne marche pas non-plus, il y a toujours quatre "ýýýý" à la fin de la chaîne :/ Juste pour voir j'ai aussi essayé :
 

Code :
  1. char * buffer = new char[2]
  2. memset(buffer,0,2)
  3. gFile.read((char *) buffer, 2);


 
Et là aussi, il y a les quatres "ýýýý". En fait, c'est pas à la lecture du fichier que ça déconne mais au niveau du "new char" : au lieu de mettre la taille à n, on dirait qu'il la met à n + 4. Ca peut-être dû à quoi ??

n°421519
_Lyghur_
Posté le 09-06-2003 à 15:55:53  profilanswer
 

++Taz a écrit :

ok. tu penses quoi de
 

Code :
  1. string mot, ligne;
  2. fichier >> mot;
  3. getline(fichier, ligne);




 
Je vais essayer..
 
-- edit: heu non ça ne peut pas marcher non-plus. Je lis un fichier binaire avec des octets et des strings en vrac les uns après les autres (sans 0 pour séparer les chaînes, ni de CR). Donc le getline peut pas marcher si ?


Message édité par _Lyghur_ le 09-06-2003 à 15:58:35
n°421520
chrisbk
-
Posté le 09-06-2003 à 15:55:59  profilanswer
 

manque le \0 a la fin
 
 
 

Code :
  1. char * buffer = new char[3]
  2. memset(buffer,0,3)
  3. gFile.read((char *) buffer, 2);

 
 
la c ok
alloue un caractere de plus a ton souc (buffer)

n°421523
_Lyghur_
Posté le 09-06-2003 à 16:07:00  profilanswer
 

C'était bien ça !!! Merci :jap:

mood
Publicité
Posté le 09-06-2003 à 16:07:00  profilanswer
 

n°421525
Taz
bisounours-codeur
Posté le 09-06-2003 à 16:08:46  profilanswer
 

_Lyghur_ a écrit :


 
Je vais essayer..
 
-- edit: heu non ça ne peut pas marcher non-plus. Je lis un fichier binaire avec des octets et des strings en vrac les uns après les autres (sans 0 pour séparer les chaînes, ni de CR). Donc le getline peut pas marcher si ?

ah ben ok, faut aussi apprendre à t'exprimer. c'est pas des chaines, c'est une suite de caractères. a ce moment là je vois pas ou est le problème de l'\0 final
 
le memset c'est bof (C) et ne sert à rien du tout dans ton cas. le cast est pas bon (istream&  read (char* s, streamsize n ); ) car C et inutile.


Message édité par Taz le 09-06-2003 à 16:11:45
n°421526
Taz
bisounours-codeur
Posté le 09-06-2003 à 16:09:52  profilanswer
 

chrisbk a écrit :

manque le \0 a la fin

voir son edit: il travaille enfait avec de octets. je vois pas d'interet de mettre un '\0' à la fin. si tu lis avec un read, t'ecris avec un write.

n°421527
chrisbk
-
Posté le 09-06-2003 à 16:10:39  profilanswer
 

++Taz a écrit :

voir son edit: il travaille enfait avec de octets. je vois pas d'interet de mettre un '\0' à la fin. si tu lis avec un read, t'ecris avec un write.


 
ben visiblement j'avais mis dans le mille, et a mon idée il attaque ca au printf/cout par derriere donc bon :D

n°421532
Taz
bisounours-codeur
Posté le 09-06-2003 à 16:13:30  profilanswer
 

moi je comprends pas comment il fait sans \0 et sans \n pour déterminer qu'il a lu une ligne et decider d'afficher.
 
si ton truc c'est juste une série de mot séparée par des esapces (ou tab), l'exemple

Code :
  1. string mot;
  2. fichier >> mot;

marche parfaitement

n°421551
_Lyghur_
Posté le 09-06-2003 à 16:41:03  profilanswer
 

Toutes les chaînes sont collées les unes aux autres et j'ai inclu dans le fichier un entête avec la taille de chaque chaîne, sa position dans le fichier, un ID et quelques autres trucs. C'est peut-être pas la meilleure solution mais ça marche bien (depuis peu :D ) et c'est rapide (pas besoin de lire tout le fichier pour lire une chaîne puisque tu connais sa position dans le fichier).
 

Citation :

le cast est pas bon (istream&  read (char* s, streamsize n ); ) car C et inutile.


 
Heu... je comprends pas ce que tu veux dire par là. Pourquoi le cast est pas bon et pourquoi c'est inutile ? :??:


Message édité par _Lyghur_ le 09-06-2003 à 16:41:53
n°421563
Taz
bisounours-codeur
Posté le 09-06-2003 à 17:02:28  profilanswer
 

Citation :

char * buffer = new char[2]
  memset(buffer,0,2)
  gFile.read((char *) buffer, 2);

n°421592
_Lyghur_
Posté le 09-06-2003 à 17:39:53  profilanswer
 

ok mais si tu pouvais t'exprimer en français plutôt qu'en C, ça m'arrangerais... enfin tant pis...

n°421596
Taz
bisounours-codeur
Posté le 09-06-2003 à 17:43:56  profilanswer
 

Code :
  1. char * buffer;
  2. ///...
  3. istream&  read (char* s, streamsize n );
  4. ///...
  5. gFile.read((char *) buffer, 2);


 
à quoi sert le cast
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Chaînes dynamiques

 

Sujets relatifs
[C++] chaines littérales et const[PHP] Comparaison de chaines de caracteres
[PHP] les liens dynamiques[vbscript]- erreur dans la recherche de chaines de caractère
[asp ? php ? ...?] Publication de pages dynamiques active desk...algos : comparaison de 2 chaines
un petit plus sur les chainesgestion des chaines de caracteres
Trouver la chaine entre deux chainespb pour compiler des lib dynamiques sous linux
Plus de sujets relatifs à : Chaînes dynamiques


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR