leer un archivo de texto en una matriz en c

¿Cuál sería el método más eficiente para leer un archivo de texto en una matriz dinámica unidimensional? reasignar después de cada char leído parece tonto, reallocing después de cada línea de lectura no parece mucho mejor. Me gustaría leer el archivo completo en la matriz. ¿Como lo harias?

No entiendo muy bien lo que quieres. ¿Desea procesar el archivo de forma incremental, leyendo una línea, luego abandonarlo y procesar el siguiente? ¿O quieres leer todo el archivo en un búfer? Si desea lo último, creo que esto es apropiado (verifique el retorno NULL para malloc y fopen en el código real para saber si el archivo existe y si tiene suficiente memoria):

FILE *f = fopen("text.txt", "rb"); fseek(f, 0, SEEK_END); long pos = ftell(f); fseek(f, 0, SEEK_SET); char *bytes = malloc(pos); fread(bytes, pos, 1, f); fclose(f); hexdump(bytes); // do some stuff with it free(bytes); // free allocated memory 

Si mmap (2) está disponible en su sistema, puede abrir el archivo y asignarlo a la memoria. De esta forma, no tiene memoria para asignar, ni siquiera tiene que leer el archivo, el sistema lo hará. Puede usar el truco fseek () que dio para obtener el tamaño .

 void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); 

EDITAR : lseek() usar lseek() para obtener el tamaño del archivo lseek()

 int fd = open("filename", O_RDONLY); int nbytes = lseek(fd, 0, SEEK_END); void *content = mmap(NULL, nbytes, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0); 

Si desea usar ISO C, use esta función .

Es la respuesta de Litb, envuelta con un manejo de error …