C语言 strtok_r for MinGW



strtok_r是strtok的重入变体。它是posix符合的。但是,MingW缺少它,我正在尝试编译使用它的程序。

有什么方法可以添加此功能的标准实现,也许是在项目自己的代码中或MINGW的标准库函数中?

由于来自另一个答案有一些有关代码的许可问题,这是一个明确的公共领域:

/* 
 * public domain strtok_r() by Charlie Gordon
 *
 *   from comp.lang.c  9/14/2007
 *
 *      http://groups.google.com/group/comp.lang.c/msg/2ab1ecbb86646684
 *
 *     (Declaration that it's public domain):
 *      http://groups.google.com/group/comp.lang.c/msg/7c7b39328fefab9c
 */
char* strtok_r(
    char *str, 
    const char *delim, 
    char **nextp)
{
    char *ret;
    if (str == NULL)
    {
        str = *nextp;
    }
    str += strspn(str, delim);
    if (*str == '')
    {
        return NULL;
    }
    ret = str;
    str += strcspn(str, delim);
    if (*str)
    {
        *str++ = '';
    }
    *nextp = str;
    return ret;
}

这是您可以在项目中添加到自己的库/功能的源代码:

char *strtok_r(char *str, const char *delim, char **save)
{
    char *res, *last;
    if( !save )
        return strtok(str, delim);
    if( !str && !(str = *save) )
        return NULL;
    last = str + strlen(str);
    if( (*save = res = strtok(str, delim)) )
    {
        *save += strlen(res);
        if( *save < last )
            (*save)++;
        else
            *save = NULL;
    }
    return res;
}

freebsd实现对您有用吗?

其自由许可但整合其可能对您的项目文档有一些要求(添加了已包括该代码的确认)。

mingw没有strtok_r的实现。但是,您可以在下面的链接中找到线程安全实现:

http://www.raspberryginger.com/jbailey/minix/html/strtok__r_8c-source.html

最新更新