/* bocabajo.c - Invierte el orden de las lineas de la entrada estandar. * Carlos Hernando , Curso de C 2005 */ #include #include #include #define MAXLINEA 2048 #define LINEASINICIALES 2 int main( int argc, char ** argv ) { char linea[MAXLINEA]; // Linea de texto que leemos char ** lineas; // Array de lineas unsigned int tamanyo = 0; // Tamanyo del array de lineas unsigned int nleidos = 0; // Lineas leidas int i; // Temporal para el bucle /* FASE 0: Ponemos la mesa */ lineas = (char **) malloc( sizeof(char *) * LINEASINICIALES ); tamanyo = LINEASINICIALES; #ifdef DEBUG printf("DEBUG: Variable tamanyo: %d\n", tamanyo); printf("DEBUG: Tamanyo de char*: %d\n", sizeof(char *)); printf("DEBUG: Tamanyo de lineas: %d\n", sizeof(char *) * LINEASINICIALES); #endif /* FASE 1: Tragamos */ while ( fgets(linea, MAXLINEA, stdin) ) { if ( nleidos >= tamanyo ) { /* XXX: Cuidado guindilla picante! */ lineas = (char **) realloc( lineas, sizeof(char *) * tamanyo * 2); tamanyo *= 2; #ifdef DEBUG printf("DEBUG: Variable tamanyo: %d\n", tamanyo); printf("DEBUG: Tamanyo de lineas: %d\n", sizeof(char *) * tamanyo*2); #endif if ( !lineas ) { printf("PICA!!!!"); exit(1); } } lineas[nleidos] = strdup(linea); nleidos++; } /* FASE 2: Escupimos */ for ( i = 0; i < nleidos; i++ ) printf("%s", lineas[nleidos-i-1]); // XXX: -1 ajuste de posicion 0 /* FASE 3: Recogemos la mesa */ for ( i = 0; i < nleidos; i++ ) free(lineas[i]); free(lineas); tamanyo = 0; return 0; }