函数原型:char *strtok(char str[], const char *delim)。安全
功能:分解字符串为一组字符串,str为要分解的字符串,delim为分割符。函数
说明:函数strtok()將一字符串按指定分割符切分为子串。当strtok在原串str中发现分割符delim时,將该字符转换为'\0'(字符串的结尾 符)。 在第一次调用时,strtok()函数必须將原串str做为第一个参数,后继的调用则將第一个参数设置为NULL。每次调用成功则返回指向 被切分片断的指针。spa
返回值:从str首部开始的依次被切分出来的字符串,当没有被分割的串时,返回NULL。 全部的delim字符將被过滤掉。线程
C语言示例指针
/** * test.c */ #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char *argv[]) { char str[] = "i am a beautiful girl"; char *ptr = NULL; ptr = strtok(str, " "); while (ptr != NULL) { printf("%s\n", ptr); ptr = strtok(NULL, " "); } exit(0); }
需注意:strtok()函数不是线程安全的,函数將每次调用后的字符串位置保存在一个函数内部的静态局部变量中,若是有多个线程调用这个函数,有可能出现冲突。code
函数原型:char *strtok_r(char s[], const char *delim, char **saveptr);orm
说明:strtok_r()函数自定义指针来指向切分出的字符串,需传入参数saveptr,它是线程安全的。字符串
C示例代码原型
/** * test_r.c */ #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, char *argv[]) { char str[] = "i am a handsome boy"; char *ptr = NULL; char *saveptr = NULL; ptr = strtok_r(str, " ", &saveptr); while (ptr != NULL) { printf("%s\n", ptr); ptr = strtok_r(NULL, " ", &saveptr); } exit(0); }