函数原型
char *strtok(char *str, char const *sep);
第一次调用strtok
函数时,这个函数将忽略间距分隔符并返回指向在str
字符串找到的第一个符号的指针,丢掉分隔符sep,
添加NULL
字符结尾(可以理解为用NULL
替换了sep
).
通过调用一系列的strtok
函数,更多的符号将从str
字符串中分离出来.每次调用strtok
函数时,都将通过在找到的符号后插入一个NULL
字符(丢掉sep
)来修改str
字符串.
为了读取str
中的下一个符号,调用strtok函数时str
参数为NULL
,这会引发strtok函数在已修改过的str
字符串查找下一个符号.
strtok函数的常用方法
p = strtok(buf, ",");
while( p!=NULL ){ p = strtok(NULL, ","); if( p==NULL ){ break; }
}
例子分析
#include<string.h>
#include <stdio.h>#define _CRT_SECURE_NO_DEPRECATE;
#pragma warning(disable:4996);
#define _CRT_SECURE_NO_WARNINGS;
void print_tokens(char *line, char const *sep);int main()
{char *s = "[123456,abced,bjhu88a,ffvjbjvy,jjbjg868bj,799nbgu]";char *start = NULL;char *end = NULL;char dest[100];char dest2[100];char *ss;start = strchr(s, (int)'['); // 找到字符'['的位置end = strchr(s, (int)']'); // 找到字符']'的位置memcpy(dest, start + 1, end - start);// 将字符串s中'['之后的所有内容都copy出来包括字符']',这是为了之后的分割字符串使用的dest[end - start - 1] = '\0'; // 将字符串dest的最后一个字符']'改成'\0',如果最后一个字符不是'\0'的话,那么在该字符串的最后一位是乱码的memcpy(dest2, start + 1, end - start);// 将字符串s中'['之后的所有内容都copy出来包括字符']',这是为了之后的分割字符串使用的dest2[end - start - 1] = '\0';printf("%s\n", dest);ss = strtok(dest, ","); // 第一次调用strtok函数,第一个参数是将要分割的字符串,第二个参数是分割的字符','while (ss != NULL) {printf("%s\n", ss);ss = strtok(NULL, ","); // 再次调用strtok函数}print_tokens(dest2,",");getchar();return 0;
}void print_tokens(char *line, char const *sep) {//static char whitespace[] = "\t\f\r\v\n";char *token;for (token = strtok(line, sep); token != NULL; token = strtok(NULL, sep)) {printf("Next token is %s\n", token);}
}
这里写了两种函数的用法,其实没什么区别。