c语言strtok函数用法
的有关信息介绍如下:
C语言 strtok 函数用法详解
一、函数简介
strtok 是 C 标准库中的一个字符串处理函数,用于将字符串分割成一系列的“标记”(tokens)。该函数通过指定的分隔符来拆分输入字符串,并返回第一个找到的标记。后续的调用可以继续在剩余的字符串中查找新的标记,直到没有更多的标记为止。
二、函数原型
char *strtok(char *str, const char *delim);参数:
- str:指向要分割的字符串。首次调用时,应传入待处理的原始字符串;后续调用时,应传入 NULL 以继续在上一次停止的位置进行分割。
- delim:包含分隔符的字符串。这些字符将被视为分隔符,用于分割输入字符串。
返回值:
- 成功时,返回一个指向找到的下一个标记的指针。
- 如果没有找到更多标记(即已到达字符串末尾),则返回 NULL。
三、使用注意事项
- 修改原字符串:strtok 会修改传入的字符串,用空字符 ('\0') 替换分隔符,因此原字符串会被破坏。如果需要保留原字符串,应在调用 strtok 前先复制一份。
- 线程安全性:strtok 不是线程安全的,因为它内部使用了静态变量来跟踪当前的处理位置。在多线程环境中,应使用 strtok_r(POSIX 标准)作为替代。
- 连续调用:为了获取所有标记,需要多次调用 strtok,每次传递 NULL 作为第一个参数。
四、示例代码
以下是一个简单的示例,演示如何使用 strtok 来分割一个以空格和逗号分隔的字符串:
#include <stdio.h> #include <string.h> int main() { char str[] = "Hello, world! This is a test."; const char delim[] = " ,.!"; // 分隔符集合 char *token; // 获取第一个标记 token = strtok(str, delim); while (token != NULL) { printf("%s\n", token); // 打印每个标记 // 获取下一个标记 token = strtok(NULL, delim); } return 0; }输出结果为:
Hello world This is a test在这个例子中,字符串 "Hello, world! This is a test." 被空格、逗号和点号分割成了多个标记,并逐一打印出来。
五、总结
strtok 是一个强大的字符串分割工具,但使用时需要注意其会修改原字符串且不是线程安全的特性。对于多线程应用或需要保留原字符串的场景,应考虑使用其他更合适的方法或替代品如 strtok_r。



