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

标签 c split malloc realloc segmentation-fault

我尝试实现一个 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;
}

当我尝试用“ls | ls”之类的 2 arg 拆分字符串时出现段错误,第一个 ls 在选项卡中存货很好,但对于第二个,我们在 strdup(splittedPart) 处出现分段故障.

我希望你能理解我的英语,我不是很擅长。 谢谢。

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

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

最佳答案

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

关于c - 在 C 中实现 Split 函数,重新分配没有效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27871141/

相关文章:

c - C 中 ' # ' 字符的右对齐

c - 使用 libevent evhttp 流式传输客户端请求正文?

java - 如何在任何 "character, but never at\"拆分字符串(在 Java 中)? RegEx 是否合适,如果合适,如何?

bash - 如何在 bash 中拆分由制表符分隔的字符串

c - 动态内存分配不会使(制作)buff 溢出?

我们可以使用数组的表示法来表示 malloc 分配的内存吗?

在 Ubuntu 上创建二进制文件

c - 使用 setuid 调试 setuid 程序/"Permission denied"

java - 如何将字符串拆分为单词、空格和换行符?

c - 如何重置指针