Usando strtok () en un bucle en C?

Estoy tratando de usar strtok () en un bucle nested. Pero esto no me está dando los resultados deseados. Posiblemente porque están usando la misma ubicación de memoria. Mi código es de la forma: –

char *token1 = strtok(Str1, "%"); while(token1 != NULL ) { char *token2 = strtok(Str2, "%"); while(token2 != NULL ) { //DO SMTHING token2 = strtok(NULL, "%"); } token1 = strtok(NULL, "%"); // Do something more } 

Sí, strtok() , de hecho, usa memoria estática para guardar su contexto entre invocaciones. Utilice una versión reentrante de strtok() , strtok_r() lugar, o strtok_s() si está usando VS (idéntico a strtok_r() ).

Tiene un argumento de contexto adicional, y puede usar contextos diferentes en diferentes bucles.

 char *tok, *saved; for (tok = strtok_r(str, "%", &saved); tok; tok = strtok_r(NULL, "%", &saved)) { /* Do something with "tok" */ } 

strtok está usando un buffer estático. En tu caso deberías usar strtok_r. Esta función usa un buffer provisto por el usuario.

WayneAKing publicó una alternativa en el Microsoft Developer Center.

Citando a él:

Ven aquí

http://cpp.snippets.org/code/

y descarga este archivo

Stptok.C Función mejorada de tokenización

También puede descargar los archivos de encabezado necesarios desde el mismo sitio.

Esta es una versión modificada de strtok que coloca los tokens analizados (subcadenas) en un búfer separado. Debería poder modificarlo para adaptarlo a sus necesidades.

  • Wayne

PD: tenga en cuenta que estos archivos pueden estar en formato * nix con respecto al final de las líneas. es decir, solo 0x0A y no 0x0D 0x0A

Esta es una alternativa si no tiene las bibliotecas de Microsoft en su entorno.

Espero que ayude a los demás:)