el problema es que me imprime basura y creo que tiene que ver con que le puse EOF en el while para cuando se encuentre el fin de linea
Si no tienes una referencia de calidad deberías conseguir una.
El problema se encuentra en el bucle y se debe a que comparas el valor de retorno de fread (numero de elemento leídos, siempre igual o mayor que cero) con la constante EOF (algún valor negativo).
Debes cambiarlo a:
while (fread(buffer
, 1, 1, fo
) == 1)
Pero si vas a leer e imprimir carácter por carácter mejor utiliza las funciones fgetc y fputc.
Un saludo