[Ayuda] Duda Strtock en C

Iniciado por mokaNordic, 2 Diciembre 2014, 20:22 PM

0 Miembros y 1 Visitante están viendo este tema.

mokaNordic

Hola buenas,
He usado el comando strtock en C muchísimas veces y nunca se me había planteado un problema del estilo. El caso es que lo estaba usando para leer líneras   de un fichero donde el caracter que separa los tokens es ; .
Creo un bucle diciendo que cuando no haya más tokens(null) pues finalice.
   
El tema, es que cada token, pues tengo que tratarlo...guardarlo, etc etc... llamadas a funciones.
Pues de forma "misteriosa" cuando llamo a una función en concreto,
hace que no haya más tokens de modo que deja de analizar el resto de la línea.
   
A esa función, la única relación que hay con strtock es que le paso una copia del token (no el puntero original).

Cuando la función en cuestión la quito, strtock funciona perfectamente y lee todos los tokens.
Muestro parte del código para hacer una idea:

char *ptr;
        char delimitador[] = ";";
ptr = strtok( NULL, delimitador); 
char retorno_nombre[20];
char token_extraido[20];
int contador=0;

ptr = strtok( linea, delimitador); 
do{
...
if(contador == 0)
//Funciones , inclusive la misma que en el siguiente if da problemas.
//contador ++
else if(contador ==1){
strcpy(token_extraido,ptr);
printf("Token (nombre):%s",token_extraido);
strcpy(retorno_nombre,buscarNombre(token_extraido));
printf("Nombre retornado:%s",retorno_nombre); //Las funciones funcionan correctamente
contador++;
}
else if(contador >=2)
//Otras funciones. Aqui no entra ya como tenga la funcion buscarNombre del anterior if.

}while((ptr = strtok( NULL, limitador ) !=NULL);


¿Alguna vez a alguien le ha pasado algo parecido? ¿Saben porqué podría ser si no hay relación directa entre el puntero ptr y la llamada o retorno de esa función?

Un saludo, y muchas gracias de antemano.

_Enko

#1
Pues me parece que la condicion del while algo esta mal.


ptr = strtok( linea, delimitador);  
do{
}while((ptr = strtok( NULL, limitador ) !=NULL);


No sería:

while((ptr = strtok( linea, delimitador)) !=NULL)
{
}


Tambien en tu while  original te  falta un ")"

Saludos.

mokaNordic

Buenas,
Fallo mio al copiar el trozo de código aquí. En el programa esta bien jeje sino ni me compilaria.Pero gracias por la observación :)