美文网首页C语言
strtok: 一个很坑的函数

strtok: 一个很坑的函数

作者: 大草原上的小羊糕 | 来源:发表于2016-04-22 15:27 被阅读0次

    用法: 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: 一个很坑的函数

        本文链接:https://www.haomeiwen.com/subject/gdatrttx.html