funciona - C: uso correcto de strtok_r
strtok php (3)
¿Cómo puedo usar strtok_r en lugar de strtok para hacer esto?
char *pchE = strtok(NULL, " ");
Ahora estoy tratando de usar strtok_r
correctamente ... Pero a veces tengo problemas con el strtol
. Tengo un hilo que ejecuto 10 veces (al mismo tiempo).
char *savedEndd1;
char *nomeClass = strtok_r(lineClasses, " ", &savedEndd1);
char *readLessonS = strtok_r (NULL, " ", &savedEndd1);
char *readNTurma = strtok_r(NULL, " ", &savedEndd1);
if (readNTurma==NULL)
printf("CLASS STRTOL begin %s %s/n",nomeClass, readLessonS );
int numberNTurma = strtol(readNTurma, NULL, 10);
Y estoy captando ese readNTurma == NULL
varias veces ... ¿Por qué es eso? No puedo entender por qué viene NULL
?
char str[]="string for sample";
char *reserve;
char *pchE = strtok_r(str, " ", &reserve);//when next call str -> NULL
La documentación para strtok_r es bastante clara.
La función strtok_r () es una versión reentrante strtok (). El argumento saveptr es un puntero a una variable char * que strtok_r () usa internamente para mantener el contexto entre las llamadas sucesivas que analizan la misma cadena.
En la primera llamada a strtok_r (), str debe apuntar a la cadena a analizar, y el valor de saveptr se ignora. En llamadas posteriores, str debe ser NULL y saveptr no debe cambiarse desde la llamada anterior.
Entonces tendrías código como
char str[] = "Hello world";
char *saveptr;
char *foo, *bar;
foo = strtok_r(str, " ", &saveptr);
bar = strtok_r(NULL, " ", &saveptr);
Mi ejemplo probado (PROBAR este código)
#include <stdio.h>
#include <string.h>
char str[] = "1,22,333,4444,55555";
char *token;
char *rest = str;
while((token = strtok_r(rest, ",", &rest)))
{
printf("token:%s/n", token);
}
Resultado.
token:1
token:22
token:333
token:4444
token:55555
tal vez no sea perfecto, pero esto funciona con la mínima cantidad de variables, y strtok_r
es seguro para subprocesos.