char * Mystrtok(char * string, const char * control) { unsigned char *str; const unsigned char *ctrl = (const unsigned char *)control; //注意这里使用了static类型,实际的strtok函数出于线程安全会使用TLS static unsigned char* _TOKEN = NULL; static unsigned char map[32]; //赋初值 int count; /* Clear control map */ for (count = 0; count < 32; count++) map[count] = 0; /* Set bits in delimiter table */ //map为static变量,那么这个分隔符表只需要赋值一次即可 if (NULL != string) { do { map[*ctrl >> 3] |= (1 << (*ctrl & 7)); } while (*ctrl++); } /* Initialize str */ /* If string is NULL, set str to the saved * pointer (i.e., continue breaking tokens out of the string * from the last strtok call) */ if (string) str = (unsigned char *)string; else str = (unsigned char *)_TOKEN; /* Find beginning of token (skip over leading delimiters). Note that * there is no token iff this loop sets str to point to the terminal * null (*str == ' ') */ while ((map[*str >> 3] & (1 << (*str & 7))) && *str) str++; string = (char*)str; /* Find the end of the token. If it is not the end of the string, * put a null there. */ for (; *str; str++) if (map[*str >> 3] & (1 << (*str & 7))) { *str++ = '