#include #include char* InicializarCadena() { int i = 0; char c, *s; s = (char*)malloc(sizeof(char)); while((c = getchar()) != '\n') { s[i] = c; i++; s = (char*)realloc(s, (i + 1)*sizeof(char)); } s[i] = '\0'; return s; } void UltimasNlineas(FILE *fp1, FILE *fp2, int n) { int *lin, car = 0, i = 0; char c; lin = (int*)calloc(1,sizeof(int)); while(!feof(fp1)) { c = fgetc(fp1); car++; if(c == '\n') { car++; lin[i] = car; i++; lin = (int*)realloc(lin, (i+1)*sizeof(int)); } } lin[i] = car; if(i+1 >= n) { fseek(fp1,lin[i-n],SEEK_SET); while(!feof(fp1)) { c = fgetc(fp1); fputc(c,fp2); } } else printf("ERROR: numero de lineas insuficientes\n"); } int main(void) { FILE *fp1, *fp2; char *nom1, *nom2; int n; printf("Introduzca el nombre del fichero de entrada: "); nom1 = InicializarCadena(); printf("Introduzca el nombre del fichero de salida: "); nom2 = InicializarCadena(); printf("Introduzca el numero de lineas que quiere copiar: "); scanf("%d",&n); fp1 = fopen(nom1, "r"); if(fp1 == NULL) { printf("ERROR: no se puede abrir el fichero de entrada\n"); system("PAUSE"); exit(1); } fp2 = fopen(nom2, "w"); if(fp2 == NULL) { printf("ERROR: no se puede abrir el fichero de salida\n"); system("PAUSE"); exit(1); } UltimasNlineas(fp1, fp2, n); system("PAUSE"); return 0; }