elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [Ayuda] Duda Strtock en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Ayuda] Duda Strtock en C  (Leído 2,073 veces)
mokaNordic

Desconectado Desconectado

Mensajes: 7


Ver Perfil
[Ayuda] Duda Strtock en C
« en: 2 Diciembre 2014, 20:22 pm »

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:

Código
  1. char *ptr;
  2.        char delimitador[] = ";";
  3. ptr = strtok( NULL, delimitador);  
  4. char retorno_nombre[20];
  5. char token_extraido[20];
  6. int contador=0;
  7.  
  8. ptr = strtok( linea, delimitador);  
  9. do{
  10. ...
  11. if(contador == 0)
  12. //Funciones , inclusive la misma que en el siguiente if da problemas.
  13. //contador ++
  14. else if(contador ==1){
  15. strcpy(token_extraido,ptr);
  16. printf("Token (nombre):%s",token_extraido);
  17. strcpy(retorno_nombre,buscarNombre(token_extraido));
  18. printf("Nombre retornado:%s",retorno_nombre); //Las funciones funcionan correctamente
  19. contador++;
  20. }
  21. else if(contador >=2)
  22. //Otras funciones. Aqui no entra ya como tenga la funcion buscarNombre del anterior if.
  23.  
  24. }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.


En línea

_Enko


Desconectado Desconectado

Mensajes: 538



Ver Perfil WWW
Re: [Ayuda] Duda Strtock en C
« Respuesta #1 en: 2 Diciembre 2014, 20:37 pm »

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

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

No sería:
Código:
while((ptr = strtok( linea, delimitador)) !=NULL)
{
}

Tambien en tu while  original te  falta un ")"

Saludos.


« Última modificación: 2 Diciembre 2014, 20:43 pm por _Enko » En línea

mokaNordic

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: [Ayuda] Duda Strtock en C
« Respuesta #2 en: 2 Diciembre 2014, 21:37 pm »

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 :)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda con un for, ayuda
Scripting
edunardo 4 2,755 Último mensaje 28 Enero 2009, 05:10 am
por leogtz
[Ayuda] Duda « 1 2 »
Programación Visual Basic
jorgelin95 15 6,075 Último mensaje 16 Septiembre 2010, 07:36 am
por BlackZeroX
AYUDA -.- ahora no entro más en 4chan (tengo una duda, ayuda por favor)
Foro Libre
Draklit 6 9,275 Último mensaje 15 Octubre 2010, 03:14 am
por Draklit
Ayuda con una Duda?
Dudas Generales
iLouks 0 2,071 Último mensaje 18 Octubre 2010, 22:56 pm
por iLouks
Ayuda (DUDA)
Dudas Generales
Tracxus 4 3,607 Último mensaje 29 Diciembre 2010, 23:40 pm
por Tracxus
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines