Реализация функции Split в C, перераспределение не имеет эффекта

Я пытаюсь реализовать функцию разделения, чтобы разделить строку с символом, как в Java. Но моя функция должна хранить разделенную строку во вкладке с 2 измерениями (вкладка находится в параметрах). И моей функции нужно возвращать числа арг.

Поэтому я передаю адрес 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 аргумента, например "ls | ls", первый ls был хорошо представлен во вкладке, но для второго мы получаем ошибку сегментации в strdup(splittedPart).

Я надеюсь, что вы понимаете мой английский, я не очень хорош в этом. Спасибо.

РЕДАКТИРОВАТЬ: я забыл, я вызываю функцию с:

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

1 ответ

Решение

Вы столкнулись с ошибкой приоритета; *parsedCommand[argc] интерпретируется как *(parsedCommand[argc]) вместо того, что выглядит так, как вы хотите, (*parsedCommand)[argc],

Другие вопросы по тегам