一、strtok()函数作用:
用于分割字符串 (tokenize),按照指定的分隔符字符集把字符串拆分成若干个"子串"(token)。
每次调用返回一个子串的指针,没有更多 token 时:返回 NULL。
strtok() 会 修改原字符串 ,在分隔符位置写入 '\0'。
二、为什么线程不安全?
strtok() 在内部使用了一个 静态全局指针 来记录上一次解析的位置。
这意味着:
-
如果两个线程同时调用
strtok(),它们会互相覆盖内部状态; -
即使在同一线程里解析多个字符串(没重置),也会被破坏。
三、参考示例
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "apple,banana,orange";
char *token;
token = strtok(str, ",");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, ",");
}
return 0;
}