Eso pasa porque al final del archivo hay una linea vacía, es decir un retorno de carro.
De todas formas, si estás usando fread puedes usar el valor que retorna para verificar que has llegado al final del archivo, ya que este retorna el número de bytes que se han leído del archivo, siendo distinto de los que debería leer en caso de haber llegado al final del mismo.
Aquí te dejo un código para leer un archivo sin que se repita el final usando fread:
Código:
FILE *archivo;
char s[12];
int leidos;
archivo=fopen("data.txt", "rb"); // En modo binario para leer todo incluyendo retornos de carro.
while(!feof(archivo)) {
leidos=fread(&s, sizeof(char), sizeof(s)-1, archivo);
s[leidos]=0x00; // Para asegurarse que la cadena leída tenga un final.
printf("%s", s);
if(leidos!=sizeof(s)-1) break;
}
Pero si estás leyendo estrictamente texto, también puedes usar fgets, aquí te dejo un código para leer un archivo sin que se repita el final usando fgets:
Código:
FILE *archivo;
char s[12];
int leidos;
archivo=fopen("data.txt", "r");
while(fgets((char*)&s, sizeof(s), archivo)) {
printf("%s", s);
}
Para comparar los datos que has leído con los anteriores puedes usar memcmp.