分割字符串
#include <string.h>
char *strtok(char *str, const char *delim);
char *strtok_r(char *str, const char *delim, char **saveptr);
返回值:每次调用依次返回字符串str中的一个Token,如果到达str末尾就返回NULL
参数str是待分割的字符串,delim是分割符,可以指定一个或多个分割符,strtok遇到其中任何一个分割符就会分割字符串。
举例:
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char str[] = "root:x::0:root:/root:/bin/bash:";
char *token;
token = strtok(str, ":");
printf("%s\n", token);
while((token = strtok(NULL, ":")) != NULL)
printf("%s\n", token);
return 0;
}
$./a.out
root
x
0
root
/root
/bin/bash
strtok_r()函数是一个可重入版本的strtok()函数。
saveptr的参数是一个char *类型的变量,传入到saveptr中用来保存被分割剩下的字符串的首地址。
举例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
char *str1, *str2, *token, *subtoken;
char *saveptr1, *saveptr2;
int j;
if (argc != 4) {
printf("error\n");
exit(1);
}
for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) {
token = strtok_r(str1, argv[2], &saveptr10);
if (token == NULL)
break;
printf("%d: %s\n", j, token);
for (str2 = token; ; str2 = NULL) {
subtoken = strtok_r(str2, argv[3], &saveptr2);
if (subtoken == NULL)
break;
printf("--> %s\n", subtoken);
}
}
return 0;
}
$./a.out 'a/bbb///cc;xxx:yyy;' ';:' '/'
1:a/bbb///cc
-->a
-->bbb
-->cc
2:xxx
-->xxx
3:yyy
-->yyy