在C中实现Split函数,重新分配没有效果

时间:2015-01-09 23:47:55

标签: c split malloc realloc sigsegv

我尝试实现一个split函数来拆分一个像java一样的字符串。但是我的函数需要在带有2个维度的选项卡中存储拆分的字符串(选项卡在参数中)。我的函数需要返回arg的数字。

所以我在我的函数中传递了一个char **的地址,我想重新分配这个char **但是它没有用。

int split(char*** parsedCommand,const char* splitCaracter,const char* myString) {
    char* splittedPart = "";
    char* copyOfmyString = NULL;
    int argc = 0;

    copyOfmyString = strdup(myString);
    splittedPart = strtok(copyOfmyString, splitCaracter);

    while(splittedPart != NULL)
    {
        *parsedCommand = (char**) realloc(*parsedCommand, sizeof(char*)*(argc+1));
        if (*parsedCommand == NULL)
        {
            printf("fatalError ");
            exit(-1);
        }
        (*parsedCommand)[argc] = strdup(splittedPart);

        if ((*parsedCommand)[argc] == NULL)
        {
            printf("fatalError ");
            exit(-1);
        }

        splittedPart = strtok (NULL, splitCaracter);

        argc++;
    }

    free(copyOfmyString);
    return argc;
}

当我尝试用2个arg分割字符串时,我遇到了分段错误,例如" ls | ls",第一个ls在选项卡中表现良好,但是对于第二个ls,我们在strdup(splittedPart)处获得了分段错误。

我希望你理解我的英语,我并不擅长英语。 THX。

编辑:我忘记了我用以下函数调用该函数:

char ** cmd_membres = NULL;
split(&cmd_membres, "|", chaine);

1 个答案:

答案 0 :(得分:2)

您遇到了优先级错误; *parsedCommand[argc]被解释为*(parsedCommand[argc]),而不是您想要的内容(*parsedCommand)[argc]