Question

autre question , < a href = "https://stackoverflow.com/users/179910/jerry-coffin"> Coffin Jerry a souligné ce qui suit:

  

Il est (probablement) pas vraiment lié à votre question, mais while (!feof(fileptr)){ est à peu près un bug garanti.

Je me suis dit que je commencerais une autre question puisque ce commentaire est un peu hors-sujet. Quelqu'un pourrait-il me l'expliquer? Ce fut le premier programme que je l'ai écrit en C droit devant.

Était-ce utile?

La solution

La raison de cette déclaration est que feof est toujours (d'abord) false lorsque la fin du fichier a été atteint - il ne devient vrai après la première tentative avortée de lire après la fin du fichier

.

Par conséquent

char mychar;
while(!feof(fileptr))
{
    fread(&mychar, sizeof(char), 1, fileptr);
    fprintf(stderr, "The char is '%c'.\n", mychar);
}

traitera un caractère comme un trop grand nombre.

La bonne façon est de vérifier la valeur de retour de fread (ou quelle que soit la fonction que vous utilisez pour lire) ou bien appeler feof après la fonction qui fait la lecture. Par exemple:

char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
    fprintf(stderr, "The char is '%c'.\n", mychar);

Autres conseils

Google trouve ceci: http://www.drpaulcarter.com /cs/common-c-errors.php#4.2

Il dit: « L'auteur n'a pas encore vu tout étudiant utiliser correctement la fonction feof ()! »

En résumé, les fonctions de fichier C comme fread et les valeurs d'état de retour de fwrite de toute façon que vous ne doit pas ignorer . Vérification de la valeur de feof est l'un de ceux boulonnage la porte de l'écurie après que le cheval a déjà fui genre de choses.

La liste C FAQ a répondre ainsi que les réponses à beaucoup d'autres fréquemment questions posées:

  

En C, la routine de fin de fichier est indiqué que, après une entrée a essayé de le lire, et a échoué.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top