¿Por qué fgets lee un texto adicional en la programación de Windows?
Señale dos preguntas como referencia.
El uso de la función feof en while(!feof(fp)) es inapropiado. Esta función debe seguir lógicamente la "declaración de lectura de archivo" para que tenga efecto correctamente. Si la escribe así, la acción de lectura no se producirá al ingresar el while por primera vez. Se recomienda escribir así: while (fgets (temp, sizeof (temp), fp)) {...}, porque fgets devuelve temp cuando se lee correctamente y devuelve NULL cuando lee el final del archivo.
lstrcat(line,"\r\n"); es obviamente redundante, porque fgets leerá '\n' en el archivo y luego agregará un '\0' después, luego hay no es necesario agregar '\n', especialmente agregar un \r (retorno de carro): '\n' ya son dos acciones de avance de línea + retorno de carro, \r es obviamente redundante. Eso probablemente tenga algo que ver con eso.