В частности, у меня есть строка «Hello world». Я хочу разделить ее на «» (т.е. разделить на слова) и сохранить эти слова в массив с помощью указателя char * temp, но так как Я могу читать строки различной длины, я не знаю, сколько слов изначально присутствовало во входной строке, поэтому для этого я изначально выделил один блок памяти для указателя '* temp' (при условии, что я могу сохранить адрес 1-го токена (т. е. 1-го слова)), затем, если я встретлю 2-е слово в строке, я перераспределяю 2 блока памяти, чтобы «temp [0]» мог расшириться до «temp [1]» и указать до 2-го слова в данной строке ..
..... Аналогичным образом, когда в строке появляется n-е слово, указатель '* temp' расширяется до n блоков с помощью функции 'realloc ()'.
Но когда я компилировал свой код, он выдал сообщение об ошибке «Ошибка сегментации (ядро сброшено)» ..
Где я не прав ??
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char name[20] = {"Hello world"};
char *p = strtok(name, " ");
//char *temp[4]; //If I initialize temp as array of pointer this is working well
char *temp;
temp = (char*)malloc(sizeof(char));
int n = 1;
while(p!= NULL)
{
temp = (char*)realloc(temp,(n)*sizeof(char));
temp[--n] = p;
p = strtok(NULL," ");
++n;
}
for (int i = 0; i < 2; ++i)
printf("%s\n", temp[i]);
return 0;
}