Initialisation et affichage d'un buffer.
Salut! :D
J'implémente une classe fichier mais j'ai des problèmes pour afficher un fichier bufferisé:
Code:
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:
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. :D
Re: Initialisation et affichage d'un buffer.
Code:
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.