所以,我正在寻找一个与 PHP 的 explode 函数等效的 C 函数。对于那些不熟悉的人:Explode 抓取一个字符串并解析由给定字符/转义序列分隔的每个条目。这个函数最好的部分是它的返回值,它是一个包含所有条目的已经伪造的数组。问题是,这在 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);