Imagínate que strtok esta construida así (no es realmente así pero sirve para que veas como podría funcionar):
char* mi_strtok(char *str, const char *delim) {
char *ret_dir;
static char *intermedio;
static char *fin;
if(str) {
ret_dir = str;
fin = str+strlen(str)+1;
}
else
ret_dir = intermedio+1;
if(ret_dir >= fin)
return NULL;
intermedio = strpbrk(ret_dir, delim);
if(intermedio)
*intermedio = '\0';
else
intermedio = fin;
return ret_dir;
}