Chr*_*odd 18
strtok 相当于(通常定义为):
char *strtok(char *str, const char *delim) {
static char *save;
return strtok_r(str, delim, &save);
}
Run Code Online (Sandbox Code Playgroud)
通常,您应该strtok_r直接使用而不是strtok,除非您需要将代码移植到仅支持的POSIX-2001之前的系统strtok
Die*_*Epp 12
_r函数的版本是可重入的:您可以同时从多个线程或嵌套循环中调用它们,等等.可重入版本通常需要额外的参数,此参数用于在调用之间存储状态而不是使用全局变量.
非重入版本通常使用全局状态,因此如果从多个线程调用它们,则可能正在调用未定义的行为.你的程序可能崩溃,或者更糟.
从手册页(man 3 strtok):
该
strtok_r()函数是一个可重入的版本strtok().必须在每次调用时提供最后一个上下文指针.strtok_r()只要使用单独的上下文指针,该函数也可用于将两个解析循环嵌套在另一个中.
strtok 当您将NULL作为第一个参数时,保存静态指针以供下次重用,因此您无法并行解析2个字符串.
在strtok_r你给出指针,作为out参数(指针指针).所以函数中没有静态指针,你可以从一个字符串移动到另一个字符串然后返回...