La cosa es, tengo que hacer un programa que invierta el orden de las lineas de los ficheros que se le pasa de argumento
Por ejemplo:
Código: Seleccionar todo
fich1=
a
b
c
fich2=
1
2
3
3
2
1
c
b
a
El caso es que tengo algun problema de memoria, pero no se donde, os dejo lo que tengo hecho, un saludo y gracias de antemano
Código: Seleccionar todo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define iniciales 2
int main(int argc, char *argv[]){
char leido[2048]; //linea leida
int nLeidas; //numero de lineas leidas
int i,j,k; //variables de rercorrido
char ** leidas; //array con las lineas leidas
FILE *entrada;
int tam = 0; //tamaño array de lineas
// Ficheros como argumento
for (i=argc-1; i>0; i--){
entrada = fopen(argv[i],"r");
if(entrada==NULL){
printf("No existe el fichero");
}
else{
//Inicicializamos el array
leidas = (char **) malloc (sizeof (char *)* iniciales);
tam = iniciales;
//Comenzamos a almacenar lineas
while(!feof(entrada)){
//Comprobamos si vamos a superar el tamaño del array
if (nLeidas>=tam){
leidas = (char **) realloc (leidas, sizeof(char*)*tam*2);
tam *=2;
}
fgets(leido, 2048, entrada);
leidas[nLeidas] = strdup(leido);
nLeidas++;
}
//Devolvemos las lineas en el orden inverso
for (j= 0; j<nLeidas; j++){
printf("%s", leidas[nLeidas-i-1]);
}
//Limpiamos la memoria
for (k=0; k<nLeidas; k++){
free(leidas[k]);
}
free(leidas);
tam=0;
}
}
}
http://pastebin.com/P02MNgzZ