0

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

1 回答 1

1

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

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

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

换句话说,循环遍历您的字符串并继续调用strtok(),直到它返回NULL以获取所有strtok()返回为char*.

于 2014-01-25T13:15:10.630 回答