zoukankan      html  css  js  c++  java
  • c strtok函数代码实现

    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++ = '';
                break;
            }
    
        /* Update nextoken (or the corresponding field in the per-thread data
         * structure */
        _TOKEN = str;
    
        /* Determine if a token has been found. */
        if (string == (char*)str)
            return NULL;
        else
            return string;
    }

    标准库

    从此山高路远,纵马扬鞭。愿往后旅途,三冬暖,春不寒,天黑有灯,下雨有伞。此生尽兴,不负勇往。
  • 相关阅读:
    C#移动及改变控件大小
    flutter学习(状态组件,组件)
    dart学习1
    rn的优化
    git命令
    Immutable
    树形数据结构的搜索功能
    promise
    js出场率极高的代码
    js浮点数计算精度解决方案
  • 原文地址:https://www.cnblogs.com/feizianquan/p/14651439.html
Copyright © 2011-2022 走看看