¿Por qué es este código erróneo C?
-
22-09-2019 - |
Pregunta
otra pregunta , < a href = "https://stackoverflow.com/users/179910/jerry-coffin"> Jerry Ataúd señaló lo siguiente:
Es de (probablemente) no es realmente relacionada con su pregunta, pero
while (!feof(fileptr)){
es más o menos un error garantizada.
pensé que empezaría una pregunta separada ya que el comentario es un poco fuera de tema. ¿Podría alguien explicarme esto? Este fue el primer programa que he escrito en C recta antes.
Solución
La razón de esta afirmación es que feof
está siendo falsa (inicialmente) cuando se ha alcanzado el final del archivo -. Sólo se hace realidad después del primer intento fallido leer más allá del final del archivo
Por lo tanto
char mychar;
while(!feof(fileptr))
{
fread(&mychar, sizeof(char), 1, fileptr);
fprintf(stderr, "The char is '%c'.\n", mychar);
}
procesará con un carácter demasiado.
La forma correcta es comprobar el valor de retorno de fread
(o cualquier función que está utilizando para leer) o, alternativamente, para llamar feof
después la función que hace la lectura. Por ejemplo:
char mychar;
while(fread(&mychar, sizeof(char), 1, fileptr) > 0)
fprintf(stderr, "The char is '%c'.\n", mychar);
Otros consejos
Google encuentra esto: http://www.drpaulcarter.com /cs/common-c-errors.php#4.2
Se dice que "El autor todavía no ha visto ningún estudiante utilizar la función feof () correctamente!"
Para resumir, las funciones del archivo C como valores de estado de retorno fread
fwrite
y de todos modos que . Comprobación del valor de feof
es uno de los pernos de la puerta del establo después que el caballo ya se ha escapado tipo de cosas.
La lista C FAQ tiene una respuesta junto con las respuestas a otras muchas frecuencia preguntas:
En C, al final de su archivo sólo está indicado después de una rutina de entrada ha tratado de leer, y fracasó.