strtok: 一个很坑的函数

用法: strtok(char* str, const char* split);


p = strtok(s4, split);

while(p != NULL){

        printf("%s\n", p);

        p = strtok(NULL, split);

}


吐槽一番:拿到一个字符串就一直霸占着不放,还要手动添加循环进行token。。还要修改string的值,而且不读源码根本不会知道正确的使用姿势。。遇到还是自己写吧。。

以下源码转自博客:

char * __cdecl strtok (

char * string,

const char * control

)

{

unsigned char *str;

const unsigned char *ctrl = control;

unsigned char map[32];

int count;

static char *nextoken;

/* Clear control map */

for (count = 0; count < 32; count++)

       map[count] = 0;

/* Set bits in delimiter table */

do {

       map[*ctrl >> 3] |= (1 << (*ctrl & 7));

} while (*ctrl++);

if (string)

str = string;

else

str = nextoken;

/* 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 == '\0') */

while ( (map[*str >> 3] & (1 << (*str & 7))) && *str )

str++;

string = 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++ = '\0';

break;

}

nextoken = str;

if ( string == str )

return NULL;

else

return string;

}

你可能感兴趣的:(strtok: 一个很坑的函数)