Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Ayuda Con Parser

Iniciado por Zeigon, 10 de Agosto de 2003, 08:48:50 PM

« anterior - próximo »

Zeigon

 hace un mesecillo o así escribí preguntando como coger bien las cosas de archivos de configs y cosas así, así q ahora estaba haciendo un parsercillo  :rolleyes:

el caso es q  tengo un problema:

yo tengo esto:


char * pos; //Tiene toda una linea leida del archivo
char * final; //Lo q hay detrás del igual

unsigned int posiigual, posicoma; //Posición del '=' dentro de la clave y ';' dentro de lo leido
      int i = 0;
     
      posicoma = strcspn(pos, ";");
      posiigual = strcspn(pos, "=");

      posiigual++;
     
      final = (char *)malloc(sizeof(char)); //Se le da tamaño de 1 y luego redimensiona solo cada vez q se añade algo
         
      while (posiigual < posicoma)
      {
       final[i] = pos[posiigual];
       printf("\n\nFinal-> '%s'", final); //Para ver en cada vuelta lo q tiene 'final'
       i++;
       posiigual++;
      }
     
      printf("\n\nPosiigual-> %d; Final[Posiigual]-> %c", posiigual, final[posiigual]);
      printf("\nFinal fuera del FOR -> '%s'", final);
      getch();


entonces si por ejemplo en el archivo tengo esto:


[seccion]
[cabecera]
clave=Hola que pasa;


lo q me devuelve al final es:
Hola que pasaf$

2 caracteres más de los q tiene la cadena, los cuales elegirá aleatoriamente. el caso es q ya no sé como hacer para q solo me coja hasta el ';' y nada más. en teoría esto lo hace bien, lo q no sé es pq me añade esos caracteres al final
eigon
----------------------------------------------
El arca de Noe fue construida por amateurs.
El Titanic por profesionales.

fiero

 Tienes que añadir otro caracter a la cadena y rellenarlo con el valor 0 (caracter nulo).

Oye, esto no lo he entendido:
Citarfinal = (char *)malloc(sizeof(char)); //Se le da tamaño de 1 y luego redimensiona solo cada vez q se añade algo

¿Qué es eso de que redimensiona solo? ¿donde?
Yo creo que deberias hacer algo así:

final = (char *)malloc(posicoma-posiigual);

un saludo  
www.videopanoramas.com Videopanoramas 3D player

Zeigon

 lo q quiero decir es q se le da tamaño de 1 char. y luego cuando voy haciendo lo de final = pos[posiigual]; pues me refiero a q cambia el tamaño de final a 1 char más. tampoco es q se redimensione solo pero es pa entenderme yo  :P

es q si intento hacer la asignación sin q 'final' apunte a algun sitio me da error. entonces le hago q apunte al menos a un char.

pues voy a probar

thx
eigon
----------------------------------------------
El arca de Noe fue construida por amateurs.
El Titanic por profesionales.

fiero

 Pero, si solo asignas 1 char y luego escribes más, estás machacando memoria que no has reservado, así que te dará errores e incluso cuelgues...

Bueno, a ver si lo arreglas :)
www.videopanoramas.com Videopanoramas 3D player

Zeigon

 joe pues si q andaba yo despistado, es verdad, me faltaba el nulo al final. ya ves q tontería :P


bueno q ya funciona, thx beri mach  (ole)  
eigon
----------------------------------------------
El arca de Noe fue construida por amateurs.
El Titanic por profesionales.