C/Visual C - Ayuda con esta funcion

 
Vista:

Ayuda con esta funcion

Publicado por sism (1 intervención) el 28/08/2004 19:27:47
char* leerItem(char **stri)
{
TIPO_INFO_PILA meka, ext5;
int i=0;
while(*(*(stri)+i)!=\' \')
{
/*punto A*/
*(meka + i)=*(*(stri)+i);
/*punto B*/
i++;
}
meka[i]=\'\\0\';
*stri=*stri + i+1;
return meka;
}
Buenas, buenas tengo definida esta funcion para recibir una cadena, poner en la cadena devuelta todo hasta el primer espacio, y modificar la cadena recibida kitando lo ke has puesto en la otra.Y funciona, funciona perfectamente. Pero esta funcion la utilizo en otra para evaluar expresiones sufijo (del estilo 4 3 + ) , con una estructura de datos de tipo PILA (ke esta perfectamente definida, con el Pop , el push y demas funcionanado perfectamente) El caso es ke cuando llamo a la funcion en la funcion de evaluar:
while((strcmp(it=leerItem(&cadena), \";\")!=0))
{
if(esOperando(it, &pila) != NO)
{
if (Push(&it, &pila)==ERROR)

{
LiberaPila(&pila);
return ERROR;
}
/*luego continuaria conlos pops, etc..*/
La funcion leerItem, entre los puntos ke he señalado A y B, modifica los elementos de la pila (lo he comprobado imprimiendo el ultimo y el penultimo elemento de la pila justo en esos puntos, y cambia) .Pone en todos los elementos de la pila el ultimo elemento ke ha leido.Me parece extrañisimo, ya que la funcion leerItem no toca para nada la pila, a ver si alguien puede ayudarme, que estoy hecho un lio
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Un par de dudas

Publicado por s (16 intervenciones) el 30/08/2004 17:08:50
Hola.

Te soy sincero, no sé exactamente el origen de tu problema. Sin embargo he notado un par de aspectos curiosos en tu código que digo a continuación:

1.- Comentas que la funcion leerItem() lee una cadena como parametro. Bueno, así como la tienes definida "... leerItem(char **stri)" lo que estas declarando es que estas leyendo un arreglo de cadenas(por el doble apuntador). Si quisieras que leyera una sola cadena, entonces deberias declararla "...leerItem(char *stri).

2.- El tipo "TIPO_INFO_PILA", ¿es una cadena? por que al final de tu función leerItem() lo estás regresando como si fuera una cadena. (eso debido por el char * leerItem(... )

3.- Un detalle interesante. Estas regresando un apuntador a una variable local que generalmente se destruye cuando termina la función. Esta variable es "meka". Si quieres que la información de la variable "meka" perdure para que pueda leerse una vez terminada la función, debes declararla global, es decir, fuera de la función leerItem()

Un ultimo comentario. Los apuntadores son bastante curiosos y dependiendo del compilador, a veces algo que no debería funcionar funciona, como puede ser lo de las variables locales y globales.

Checa los puntos que te menciono a ver si se corrige tu problema y sino, prueba otra vez escribiendo en el foro, incluyendo información detallada como tu estructura de datos "TIPO_INFO_PILA", los datos de entrada que le pasas y la salida que esperas obtener.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar