strtok()和strtok_r()有什么区别
时间: 2024-03-25 16:34:01 浏览: 56
C语言切割多层字符串(strtok_r strtok使用方法)
strtok()和strtok_r()都是C语言中用于字符串分割的函数,它们的区别在于线程安全性。
1. strtok():
strtok()函数是C标准库中的函数,用于将字符串按照指定的分隔符进行分割。它的原型如下:
```c
char *strtok(char *str, const char *delim);
```
strtok()函数使用一个静态变量来保存当前分割的位置,因此它是非线程安全的。在多线程环境下,如果同时调用strtok()函数,会导致数据混乱。
2. strtok_r():
strtok_r()函数是POSIX标准中定义的函数,也用于字符串分割,但它是线程安全的。它的原型如下:
```c
char *strtok_r(char *str, const char *delim, char **saveptr);
```
strtok_r()函数使用一个指向指针的指针来保存当前分割的位置,因此可以在多线程环境下安全地使用。每次调用时,需要传入一个指向指针的指针作为参数,用于保存当前分割位置的状态。
总结:
strtok()和strtok_r()都可以用于字符串分割,但strtok_r()是线程安全的,适合在多线程环境下使用;而strtok()则不是线程安全的,适合在单线程环境下使用。
阅读全文