• 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++ map的基本操作和用法
    堆排序汇总
    gdb调试多进程和多线程命令
    Linux内存分配机制
    svn 修改文件的可执行权限
    proc/sys/net/ipv4/下各项的意义
    linux read()和write
    ps命令参数
    /etc/passwd- 和/etc/shadow-文件
    openssh源码分析笔记
  • 原文地址:https://www.cnblogs.com/feizianquan/p/14651439.html
Copyright © 2020-2023  润新知