strtok 实现的源码
时间: 2023-07-20 09:13:45 浏览: 91
下面是一个简单的 strtok 函数的实现,供参考:
```c
char *strtok(char *str, const char *delim) {
static char *last = NULL; // 上一次切分的位置
char *tok, *tmp;
if (str != NULL) {
last = str;
}
if (last == NULL) {
return NULL; // 如果没有可切分的字符串,返回 NULL
}
tok = last;
// 跳过所有的分隔符
while (*tok && strchr(delim, *tok)) {
tok++;
}
if (*tok == '\0') {
last = NULL; // 如果已经到达字符串末尾,返回 NULL
return NULL;
}
tmp = tok;
// 找到下一个分隔符
while (*tmp && !strchr(delim, *tmp)) {
tmp++;
}
if (*tmp == '\0') {
last = NULL; // 如果已经到达字符串末尾,下一次调用 strtok 时从头开始
} else {
*tmp = '\0'; // 将分隔符替换为 null 字符
last = tmp + 1; // 记录下一次切分的位置
}
return tok;
}
```
这个实现并不完整,可能无法处理所有的字符串情况,但可以作为一个基本的参考。注意,这个实现使用了一个静态变量 `last` 来记录上一次切分的位置,因此在多次调用 strtok 函数时需要注意。
阅读全文