OVH Cloud OVH Cloud

comportement étrange de fopen

4 réponses
Avatar
Zorro
Bonjour,
Comment un fichier qui fait 541 500 octets ouvert avec
tfile=fopen(charname,"rb"); puis lu avec nlu=fread(charbuf,1,1000000,tfile);
où charbuf a été créé avec malloc comme un (char*) de 1 000 000 peut
renvoyer 86 524 dans nlu avec ferror ne rapportant pas d'erreur et feof
rapportant la fin de fichier???
Merci
David

4 réponses

Avatar
Michel Leunen
Zorro wrote:

Comment un fichier qui fait 541 500 octets ouvert avec
tfile=fopen(charname,"rb"); puis lu avec nlu=fread(charbuf,1,1000000,tfile);
où charbuf a été créé avec malloc comme un (char*) de 1 000 000 peut
renvoyer 86 524 dans nlu avec ferror ne rapportant pas d'erreur et feof
rapportant la fin de fichier???



D'après l'aide:

On success fread returns the number of items (not bytes) actually read.
On end-of-file or error it returns a short count (possibly 0).

Michel
--
----------------------------------------
Michel Leunen
mailto: see my homepage.
C++Builder, BCC5.5.1 Web site:
http://www.leunen.com/
----------------------------------------
Avatar
Zorro
Merci Michel pour ta réponse,
seulement je déclare mes "items" de longueur 1 dans fread donc des octets
et
puis je comprenais l'aide comme le fait que "fread retourne le nombre de
items (donc bytes dans mon cas) effectivement lus si on atteint le end of
file qui peuvent être moins que ce qui est demandé", hors mon fichier fait
541 500 octets donc pourquoi retourner 86524 items(=octets)?
David

"Michel Leunen" a écrit dans le message de
news:43062bd4$0$18366$
Zorro wrote:

> Comment un fichier qui fait 541 500 octets ouvert avec
> tfile=fopen(charname,"rb"); puis lu avec


nlu=fread(charbuf,1,1000000,tfile);
> où charbuf a été créé avec malloc comme un (char*) de 1 000 000 peut
> renvoyer 86 524 dans nlu avec ferror ne rapportant pas d'erreur et


feof
> rapportant la fin de fichier???

D'après l'aide:

On success fread returns the number of items (not bytes) actually read.
On end-of-file or error it returns a short count (possibly 0).

Michel
--
----------------------------------------
Michel Leunen
mailto: see my homepage.
C++Builder, BCC5.5.1 Web site:
http://www.leunen.com/
----------------------------------------




--
Ma Boîte de Réception est protégée par SPAMfighter
493 e-mails spam ont été bloqués jusqu'à maintenant.
Téléchargez au jour d'hui gratuitement SPAMfighter!
Avatar
Michel Leunen
Zorro wrote:

seulement je déclare mes "items" de longueur 1 dans fread donc des octets



Oui, et tu essaies d'en lire 1000000. Donc tu atteins la fin du fichier
avant d'avoir tout lu et c'est donc la deuxième phrase de l'aide qui
s'applique:
On end-of-file or error it returns a short count (possibly 0).
Maintenant pourquoi 86524, je n'en sais rien mais l'aide est claire, tu
pourrais même avoir 0.

Michel
--
----------------------------------------
Michel Leunen
mailto: see my homepage.
C++Builder, BCC5.5.1 Web site:
http://www.leunen.com/
----------------------------------------
Avatar
Zorro
exact... et effectivement le fichier est bien lu en entier sans faute...
Merci Michel
"Michel Leunen" a écrit dans le message de
news:43070802$0$14047$
Zorro wrote:

> seulement je déclare mes "items" de longueur 1 dans fread donc des


octets

Oui, et tu essaies d'en lire 1000000. Donc tu atteins la fin du fichier
avant d'avoir tout lu et c'est donc la deuxième phrase de l'aide qui
s'applique:
On end-of-file or error it returns a short count (possibly 0).
Maintenant pourquoi 86524, je n'en sais rien mais l'aide est claire, tu
pourrais même avoir 0.

Michel
--
----------------------------------------
Michel Leunen
mailto: see my homepage.
C++Builder, BCC5.5.1 Web site:
http://www.leunen.com/
----------------------------------------