stGok_r为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 == '\0') { return NULL; } ret = str; str += strcspn(str, delim); if (*str) { *str++ = '\0'; } *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实现对你有用吗?

它自由许可但集成它可能对您的项目文档有一些要求(添加一个包含代码的确认)。

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

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