what funciona explicacion does como c char strtok

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.