Я пытаюсь читать в пользовательском вводе, а затем анализировать его на токены с помощью strtok(). Вот мой код:Почему realloc не обновляет размер моего массива?
int main(){
char argv[200];
char** tokenList = NULL;
printf("shell>>");
scanf("%[^\n]%*c", argv);
int len = 0;
char* line = strtok(argv, " ");
while (line != NULL) {
printf("%s\n", line);
printf("%lu\n", sizeof(tokenList) + (sizeof(char*) * (len+1)));
tokenList = realloc(tokenList, sizeof(tokenList) + (sizeof(char*) * (len+1)));
printf("%lu\n", sizeof(tokenList));
char* p = malloc(sizeof(char) * (sizeof(line) + 1));
p=line;
tokenList[len] = p;
len++;
line = strtok(NULL, " ");
}
Три заявления печати является для моих целей отладки, и я не могу понять, что происходит. Когда я запускаю консоль и введите «а б» мой вывод следующий:
a
16
8
b
24
8
c
32
8
Почему размер моего массива tokenList не получает обновленный по зову перераспределить?
Указатель не является массивом! И это не так, как C работает. Нет массивов с динамической длиной в C. Все типы статически объявляются. 'realloc' просто изменяет размер блока памяти (например,' malloc' выделяет его). – Olaf
'sizeof()' работает только во время компиляции, а не во время выполнения. Он определяет размер данного объекта/переменной, а не то, на что он указывает. –
@Olaf: «Нет массивов с динамической длиной в C.» Есть, конечно, VLA (массивы с переменной длиной), но размер каждого объекта VLA фиксируется во время выполнения, когда он создан. Этот каламбур не связан с тем, о чем спрашивает ОП. –