una txt texto programacion matriz manejo lenguaje leer ingresar guardarlo guardar ejercicios desde datos como arreglo archivos archivo c arrays

txt - leer un archivo de texto en una matriz en c



leer una matriz en c (3)

¿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 errores ...