【strtok函数的用法】`strtok` 是 C 语言中用于字符串分割的常用函数,广泛应用于文本处理、数据解析等场景。它能够根据指定的分隔符将一个字符串拆分成多个子字符串,并逐个返回。以下是关于 `strtok` 函数的详细用法总结。
一、函数原型
```c
char strtok(char str, const char delim);
```
- 参数说明:
- `str`:要被分割的字符串。
- `delim`:分隔符字符串,可以包含多个字符作为分隔符。
- 返回值:
- 返回指向下一个子字符串的指针,若无更多子字符串,则返回 `NULL`。
二、使用方法
1. 第一次调用时,传入原始字符串和分隔符。
2. 后续调用时,传入 `NULL` 和相同的分隔符,以继续分割剩余部分。
三、示例代码
```c
include
include
int main() {
char str[] = "apple,banana,orange,grape";
char token;
const char delim[] = ",";
token = strtok(str, delim);
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, delim);
}
return 0;
}
```
输出结果:
```
apple
banana
orange
grape
```
四、常见注意事项
| 注意事项 | 说明 |
| 字符串不可修改 | `strtok` 会修改原始字符串,因此不能使用常量字符串(如 `"abc,def"`)。 |
| 分隔符可多选 | `delim` 可以是多个字符,例如 `","` 或 `" ,."`。 |
| 需要手动管理状态 | 第一次调用后,后续调用必须传入 `NULL` 才能继续分割。 |
| 不支持重入 | 在多线程环境下不安全,建议使用 `strtok_r` 替代。 |
五、与 `strsep` 的区别
| 特性 | `strtok` | `strsep` |
| 标准性 | C 标准库函数 | POSIX 标准函数 |
| 线程安全性 | 不安全 | 安全(需要传递指针) |
| 参数顺序 | `str`, `delim` | `strp`, `delim` |
| 修改原字符串 | 是 | 是 |
六、总结表格
| 项目 | 内容 |
| 函数名称 | `strtok` |
| 功能 | 字符串分割 |
| 参数 | `char str`, `const char delim` |
| 返回值 | 指向子字符串的指针或 `NULL` |
| 使用方式 | 第一次传 `str`,后续传 `NULL` |
| 分隔符 | 可以是多个字符 |
| 原始字符串 | 会被修改 |
| 多线程 | 不推荐使用 |
| 替代函数 | `strtok_r`(POSIX)或 `strsep` |
通过合理使用 `strtok` 函数,可以高效地对字符串进行分割处理,适用于日志分析、配置文件解析等多种应用场景。在实际开发中,应注意其局限性并选择合适的替代方案。


