Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: thekill01 en 19 Mayo 2012, 22:39 pm



Título: Matrices dinámicas en C
Publicado por: thekill01 en 19 Mayo 2012, 22:39 pm
Hola amigos, la verdad es que soy nuevo en la programación en C y tengo el siguiente problema.

tengo que leer un archivo de texto y quiero guardar los datos en una matriz. El problema es que la cantidad de columnas si sé cuantas son, pero la cantidad de filas no lo sé, ya que este archivo cambia de tamaño cada cierto tiempo.
Quiero guardar los datos en una matriz dinámica, de forma que leo este archivo de texto y guardo los datos en una matriz. Así de acuerdo a la cantidad de información que hay en el archivo sea la cantidad de filas de la matriz. Y no sé como implementar esto.
Espero que me puedan ayudar
Saludos
Mis disculpas si este tema ya está previamente, pero busqué y no lo encontré.


Título: Re: Matrices dinámicas en C
Publicado por: exel en 19 Mayo 2012, 22:52 pm
 Si sabes manejar memoria dinamica (malloc, etc) arreglos y archivos pues ya lo tendrias arreglado.

 Cuando ampieces a leer el archivo, sabras que debes obtener la primera fila, con la cantidad de columnas que ya dices conocer. Luego obtendras la segunda fila, y la tercera, etc. Hasta llegar al fin de archivo con la funcion feof(puntero a archivo) que indica que ya no hay mas datos en el archivo.

 Por utilidad, el Sistema Operativo no dejara que otro programa utilize el archivo hasta que tu programa termine de utilizarlo.


Título: Re: Matrices dinámicas en C
Publicado por: Aberroncho en 19 Mayo 2012, 22:54 pm
La reserva dinámica de memoria en C (estándar ANSI) se hace con las funciones malloc() y free(). La primera te da un puntero a la memoria y la segunda te libera la memoria.

void *malloc( size_t Num_bytes ); (http://c.conclase.net/librerias/?ansifun=malloc#inicio)
void free( void *puntero ); (http://c.conclase.net/librerias/?ansifun=free#inicio)

Se me ocurre que puedes hacerlo de dos formas:
  • Cuentas las líneas del ficheros y haces una única reserva de memoria para todo el array
  • Haces una lista enlazada en la que cada nodo es una fila del fichero vas reservando la memoria línea a línea y añadiéndola a tu lista enlazada



Título: Re: Matrices dinámicas en C
Publicado por: icoheed en 22 Mayo 2012, 02:06 am
La forma mas fácil para salir del problema es crear una variable que cuente los datos leídos y en base a esa dentro de un ciclo for vas aumentando los renglones. Hacerlo de forma segura y formal será con un feof o malloc.

Saludos.