C替代PHP的爆炸功能

时间:2014-01-25 13:08:06

标签: php c explode strchr

所以,我正在寻找一个与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);

1 个答案:

答案 0 :(得分:1)

使用strtok()。从它的手册页:

  

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

     

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

换句话说,循环遍历你的字符串并继续调用strtok(),直到它返回NULL以获取所有单词(将在第一次调用指定的分隔符上分割strtok() 1}})以char*返回。