Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 4 Septiembre 2013, 21:29 pm



Título: EOF y archivos
Publicado por: m@o_614 en 4 Septiembre 2013, 21:29 pm
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

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. int main()
  6. {
  7.    FILE *fo,*fd;
  8.    char buffer[50];
  9.    fo = fopen("F:\\archivo1.txt","r");
  10.    fd = fopen("F:\\archivo2.txt","w");
  11.  
  12.    if(fo == NULL || fd == NULL)
  13.       printf("Problemas al abrir archivos");
  14.    else
  15.    {
  16.        while(fread(buffer,sizeof(char),1,fo)!=EOF)
  17.            fwrite(buffer,sizeof(char),1,fd);
  18.    }
  19.    return 0;
  20. }

no se por que me imprime asi

de antemano gracias


Título: Re: EOF y archivos
Publicado por: Stereo en 4 Septiembre 2013, 22:04 pm
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


Título: Re: EOF y archivos
Publicado por: rir3760 en 5 Septiembre 2013, 02:58 am
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:
Código
  1. while (fread(buffer, 1, 1, fo) == 1)
  2.   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