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
字符串查找下一个符号.
p = strtok(buf, ",");
while( p!=NULL ){
p = strtok(NULL, ",");
if( p==NULL ){
break;
}
}
#include
#include
#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);
}
}
这里写了两种函数的用法,其实没什么区别。