Разбейте строку на токены и сохраните их в массиве указателей, используя динамическое распределение памяти - PullRequest
0 голосов
/ 18 июня 2019

В частности, у меня есть строка «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;
}
...