所以,我正在寻找一个与PHP的爆炸功能相当的C函数。 对于那些不熟悉的人:Explode抓取一个字符串并解析由给定的char /转义序列分隔的每个条目。关于这个函数的最好的部分是它的返回值,它是一个已经伪造的数组,包含所有条目。问题是,这似乎不存在于C.最近的可用函数是strchr但它只返回指向分割的第一个发生的指针。
编辑:这是函数,虽然它有不同的行为(比如返回值不同),这就是我想要的。
int explode(char* str, char* delim, char ***r) {
char **res = (char**) malloc(sizeof(char*) * strlen(str));
char *p;
int i = 0;
while (p = strtok(str, delim)) {
res[i] = malloc(strlen(p) + 1);
strcpy(res[i], p);
++i;
str = NULL;
}
res = realloc(res, sizeof(char*) * i);
*r = res;
return i;
}
可以这样称呼它:
char str[] = "test1|test2|test3";
char** res;
int count = explode(str, "|", &res);
int i;
for (i = 0; i < count; ++i) {
printf("%s\n", res[i]);
free(res[i]);
}
free(res);
答案 0 :(得分:1)
使用strtok()
。从它的手册页:
strtok()函数将字符串解析为一系列标记。上 第一次调用strtok()时应该指定要解析的字符串 在str。在应该解析相同字符串的每个后续调用中,str 应为NULL。
每次调用strtok()都会返回一个指向以null结尾的字符串的指针 包含下一个标记。此字符串不包括分隔符 字节。如果找不到更多令牌,strtok()将返回NULL。
换句话说,循环遍历你的字符串并继续调用strtok()
,直到它返回NULL
以获取所有单词(将在第一次调用指定的分隔符上分割strtok()
1}})以char*
返回。