Вы заранее не знаете размер массива, поэтому вам следует инициализировать его до некоторого фиксированного разумного размера (скажем, 16?) И сохранить индексную переменную, чтобы указывать на следующий доступный слот в массиве для хранения следующей переменной. Если индексная переменная становится равной размеру массива, вам нужно использовать realloc
, чтобы выделить больше памяти и обновить переменную размера. Продолжайте перераспределять, пока не закончите со строкой. Вот некоторый псевдокод:
size_t array_size = 16;
size_t index = 0;
char **arr = malloc(array_size * sizeof(char *));
while ((token = strtok_r(local, delim, &local))) {
if (index == array_size) {
array_size += 16;
arr = realloc(arr, array_size * sizeof *arr);
/* add error check */
}
arr[index++] = token;
}
Вы должны убедиться, что освободили выделенную память, как только закончите.