C语言 strtok()和strtok_r()
时间: 2024-09-25 13:00:38 浏览: 93
C语言切割多层字符串(strtok_r strtok使用方法)
`strtok()` 和 `strtok_r()` 都是在 C 语言标准库函数中用于字符串处理的函数,主要用于分割字符串(tokenization)。它们的主要区别在于线程安全性:
1. `strtok(char *s, const char *delim)`:这是一个单线程全局变量的版本。它接受两个参数,第一个参数 `s` 是待分割的字符串,第二个参数 `delim` 是分隔符。函数会从 `s` 开始查找分隔符,找到后将该位置之前的部分作为一次分割的结果,并替换原字符串 `s` 中的分隔符为空字符,然后返回这个结果。如果 `s` 为 `NULL`,则初始化一个内部静态变量,以便后续调用可以继续从上次的位置开始。
2. `char* strtok_r(char *s, const char *delim, char **save_ptr)`:这是线程安全的版本,也被称为 `reentrant` 版本。它需要额外的指向指针的指针 `save_ptr` 作为第三个参数,用于保存上一次分割后的位置。每次调用时,先通过这个指针获取上次的保存位置,然后继续分割。这样可以保证在多线程环境下每个线程都能独立工作,避免数据污染。
阅读全文