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.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.