[C con Clase] vector de string en c sin saber tamaño.

Agustin agscontini en gmail.com
Dom Abr 5 18:02:07 CEST 2009


Hola David.
 Mil gracias por tomarte tu tiempo y la respuesta. Sería muy cómodo implementarlo de esa forma pero mi único problema es que quede con un compañero que le iba a pasar para que trabaje el comentario auto, un vector que en cada posición tenía una linea (le resultaba mejor por los tipos de cosas que tenía que levantar y demás) y cuando le comente lo de la lista me pidió que por favor no se lo cambie ahora poruqe iba a tener que cambiar todo lo que ya hizo.
 Por el momento llegue a algo asi:

void levantar_auto(FILE * archivo_origen)
char * linea;            /*para cargar una linea del archivo origen*/
char temp[100];             /* para cargar temporalmente parte de una linea*/
int num_linea = 0;       /*para saber el número de linea que levanto*/
int i,j; /*contadores para linea temp,lineas escritas en vec*/
size_t = tam_linea;      /* para ver tamaño de string*/
char ** array            /* ¿array de string a cargar?? */

While(! feof(archivo_origen)) /*voy a leer todo el archivo y levantar de */
{                              /*a un auto y tratarlo como necesite*/
   getstring(archivo_origen, linea); /*me levanta un renglon en linea*/
   num_linea++                       /*leí una linea asi que contador aumenta*/
   If (strstr(linea,"/**")!= NULL)   /*si encuentra el inicio de AUTO...*/
   Do
    {
      getstring(archivo_origen,linea); /*leo la siguiente linea y la levanto*/
      num_linea++;                      /*aumento el contador*/
      j=0;
      if (strstr(linea,"*/")==NULL)    /* sino esta cerrado en esta linea*/
        {
    	  tam_linea = strlen(linea);
    	  *array+j= (char*) malloc((sizeof char)* tam_linea);
    	  *array+j= linea;
          debería reservar memoria en la pos[] del vector de strings para el tamaño de esta linea, y luego guardarlo en la pos[] del vector. Luego liberar la memoria supongo.
          j++;                        /*levante una linea en vector*/
        }
     } While (strstr(linea,"*/") != NULL); /*si se cierra no lo levanto..*/
     For(i=0,linea(i)=="*/"; i++)  /*escribo el renglon hasta que cierra comen*/
          temp[i]= linea[i];       /*cargo hasta llegar al corte"*/" */
     array+j= (char*) malloc((sizeof (char)* i));
     array+j = temp;               /*lo escribo en la sig pos del vector*/
     Aca mando el vector auto cargado para que otro lo trabaje con una función y pueda buscar cosas que nos sirvan (errores y demás). Sino me equivoco ahí mismo me liberan la memoria pedida y usada por mi vector y los strings de adentro...sino lo tengo uqe hacer yo para volver a usarla para el próximo vector auto.
}
fclose (archivo_origen);           /*lo termine de usar asi que lo cierro*/

No se si viene bien o no. Creo haber solucionado en parte el tema de ir reservando memoria para mi string que voy levantando, pero el vector me parece que no lo estoy haciendo reservando memoria de forma adecuada.(ni siquiera creo estar reservandole memoria de forma variable).
Muchas gracias de antemano.
Saludos

El pasado 2009-04-04 23:51:46, David escribió:
 
D> hola
D> y si haces algo asi:
D> 1-buscas el primer /**
D> 2-guardas la pocicion
D> 3-contas cuantos caracteres hay hasta el */
D> 4-reservas memoria
D> 5-volves a la pocicion guardada
D> 6-levantas todos los caracteres
D> 7-metes lo levantado en una lista simple.
D> 8-buscas el siguiente /**  vas al paso 2, si no hay terminaste de cargarlos.
D> como no sabes el tamaño del archivo ni el tamaño de los comentarios te
D> convendria mas trabajarlos de a uno a la vez, cargar solo de a uno en
D> memoriapero eso podes dejarlo para otro momento.
D> David


Más información sobre la lista de distribución Cconclase