#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/////////PROGRAMA PRINCIPAL/////////
int main(int argc, char* argv[]){
FILE *pm;
char lineafile [2048];
char linea [100][2048];
int n;
int c;
pm = fopen(stdin,"rt"); // aquí tienes que abrir fich1, rt es un parámetro válido para fopen?
while(fgets(lineafile,2048,pm)!=NULL){ // el while hace el bucle un numero de veces = a las lineas
for(n=0;n<=2048; ++n){ // por lo que el bucle for se ejecuta siempre 2048 * 4, además
strcpy(linea[n],lineafile); // únicamente tienes 100 lineas no 2048...
}
}
for(c=2048;c>=0;--c){ //lo mismo en el número de lineas la matriz tiene 100
printf("%s\n",linea[c]); //sin embargo solo de debe ejecutar el número de lineas copiadas
}
fclose(pm);
}
Por lo que quedaría más o menos así
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/////////PROGRAMA PRINCIPAL/////////
int
main ()
{
FILE *pm;
char lineafile[2048];
char linea[100][2048];
int n = 0;
int c;
pm = fopen ("fich1", "rt");
while (fgets (lineafile, 2048, pm) != NULL) //así el bucle se ejecuta únicamente el número de veces
{ //que copia linea
strcpy (linea[n], lineafile);
n++; /en n contamos el número de lineas
}
fclose (pm);
for (c = n; c >= 0; c--) //así podemos imprimir únicamente lo necesario
{
printf ("%s", linea[c]);
}
return 0;}
Espero haberte sido de ayuda, a ver que tal se te da implementarlo con memoria dinámica.
Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.