schaum - c the complete reference pdf
Usando strtok() en un bucle en C? (3)
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" */
}
Estoy tratando de usar strtok () en un bucle anidado. 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
}
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í
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:)