EOF y archivos

Iniciado por m@o_614, 4 Septiembre 2013, 21:29 PM

0 Miembros y 1 Visitante están viendo este tema.

m@o_614

Saludos tengo el siguiente programa que me hace una copia de los caracteres que se encuentran en un archivo, 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

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main()
{
    FILE *fo,*fd;
    char buffer[50];
    fo = fopen("F:\\archivo1.txt","r");
    fd = fopen("F:\\archivo2.txt","w");

    if(fo == NULL || fd == NULL)
       printf("Problemas al abrir archivos");
    else
    {
        while(fread(buffer,sizeof(char),1,fo)!=EOF)
            fwrite(buffer,sizeof(char),1,fd);
    }
    return 0;
}


no se por que me imprime asi

de antemano gracias

Stereo

Creo que el fread está mal, el 3er parámetro debería ser la longitud de la cadena

Y deberías cerrar los archivos con fclose

rir3760

Cita de: m@o_614 en  4 Septiembre 2013, 21:29 PMel 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)
   fwrite(buffer, 1, 1, fd);

Pero si vas a leer e imprimir carácter por carácter mejor utiliza las funciones fgetc y fputc.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language