Llevo todo el día pegandome con un error y no le encuentro explicación. Para mostraros el problema me he hecho un programa de prueba que simplemente hace una copia de un fichero. Acá va:
Código PHP:
#include <stdio.h>
int main(void) {
FILE *f1,*f2;
unsigned long inputsize,i;
unsigned char c;
f1 = fopen("Prueba.txt","r");
f2 = fopen("Prueba.copia.txt","w");
/* Tamaño del fichero (esta parte está comprobado que funciona) */
fseek(f1,0,SEEK_END);
inputsize = ftell(f1);
fseek(f1,0,SEEK_SET);
for (i=0;i<inputsize;i++) {
fscanf(f1,"%c",&c);
fprintf(f2,"%c",c);
}
printf("Copia realizada\n");
system("pause");
fclose(f1);
fclose(f2);
return 0;
}
El caso es que la copia la hace bien, pero al final del archivo añade caracteres que coinciden con el último caracter del fichero, y me he fijado que añade tantos como lineas tenga el fichero menos una.
Por ejemplo, si el fichero original es éste:
Código:
Linea 1
Linea 2
Linea 3
Linea 4
El fichero "copia" es este otro:
Código:
Linea 1
Linea 2
Linea 3
Linea 4444
Pero lo más desconcertante es que me pasa sólo en Windows, si el mismo programa lo compilo y pruebo en Linux, funciona perfectamente.
En linux estoy usando el compilador GCC y en Windows uso DevC++ que creo que también trae el compilador GCC.
¿Es por algún error en la programación, o es por la mie*** del Windows?