C PHP的替代方案';s爆炸函数

C PHP的替代方案';s爆炸函数,php,c,explode,strchr,Php,C,Explode,Strchr,因此,我正在寻找一个C函数,它与PHP的explode函数等效。 对于那些不熟悉的人:Explode抓取一个字符串并解析由给定字符/转义序列分隔的每个条目。这个函数最好的部分是它的返回值,它是一个包含所有条目的伪造数组。问题是,这在C中似乎不存在。可用的最接近的函数是strchr,但它只返回指向拆分第一次出现的指针 编辑:这里是函数,尽管它有不同的行为(比如返回值不同),但这正是我想要的 int explode(char* str, char* delim, char ***r) { c

因此,我正在寻找一个C函数,它与PHP的explode函数等效。 对于那些不熟悉的人: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);
char str[]=“test1 | test2 | test3”;
字符**res;
整数计数=分解(str、“|”和res);
int i;
对于(i=0;i
使用
strtok()
。从它的手册页:

函数的作用是:将字符串解析为一系列标记。在…上 第一次调用strtok()时,应指定要分析的字符串 在str中。在应该解析相同字符串的每个后续调用中,str 应该为NULL

对strtok()的每次调用都返回一个指向以null结尾的字符串的指针 包含下一个令牌。此字符串不包括分隔符 字节。如果没有找到更多的令牌,strtok()将返回NULL


换言之,在字符串中循环并不断调用
strtok()
,直到它返回
NULL
,以便将所有单词(在第一次调用
strtok()
时指定的分隔符上拆分)作为
char*
返回。您对此做了一些研究吗?谢谢,我设置函数有点困难,但我的一个朋友解决了:)我会在OP上发布解决方案