strtok_r函数的用法
时间: 2024-09-14 08:00:36 浏览: 38
`strtok_r`函数用于将字符串分割成一个个标记(token)。它与`strtok`函数类似,但它的一个关键区别在于`strtok_r`是线程安全的,因为它使用了一个额外的参数来保存状态信息。
下面是`strtok_r`函数的基本用法:
```c
#include <string.h>
char *strtok_r(char *str, const char *delim, char **saveptr);
```
- `str`:指向要被分割的字符串的指针。
- `delim`:指向一个分隔符字符串的指针,该字符串包含了作为分隔符的所有字符。
- `saveptr`:指向一个字符指针的指针,该字符指针在`strtok_r`的连续调用中保存状态信息。
`strtok_r`函数的工作方式如下:
1. 它首先会找到`str`中第一个不是分隔符的字符。如果找到了,就继续执行。
2. 接着,它会扫描`str`直到遇到`delim`中的一个字符或者字符串的结尾。
3. 如果`str`中没有非分隔符字符,`strtok_r`返回NULL。
4. 如果遇到了分隔符字符,它会在该位置放置一个null字符,将字符串分割成一个token。
5. 最后,`strtok_r`将`saveptr`指向`str`中下一个字符的位置,以便下次调用时能够继续分割剩余的字符串。
需要注意的是,第一次调用时,应该将`str`设置为待分割的原始字符串,`saveptr`设置为NULL。后续的调用应将`str`设置为NULL,而`saveptr`则为之前调用返回的值。
示例代码:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "example string, to split!";
char *delim = " ,"; // 分隔符为逗号和空格
char *ptr;
// 初始化ptr为NULL
ptr = NULL;
// 第一次调用strtok_r
char *token = strtok_r(str, delim, &ptr);
while (token != NULL) {
// 输出分割后的token
printf("Token: %s\n", token);
// 继续调用strtok_r获取下一个token
token = strtok_r(NULL, delim, &ptr);
}
return 0;
}
```
阅读全文