Поскольку list
имеет тип char**
, вы выделили память для list
здесь
list = malloc(nwords * sizeof(char *));
Но вы не выделили память для list[i]
здесь
list[i] = word; /* word base address gets copied to list[i] each time which is same*/
, поскольку word
- это массив символов и само его имя адрес , поэтому list[i]
каждый раз получает один и тот же базовый адрес , но вы нене хотел этого.
Итак, чтобы преодолеть это, сначала выделите память для каждого list[i]
, а затем используйте strcpy()
.
Выделите память для list[i]
, как
for(int i = 0; i< nwords; i++){
scanf("%s", word);
list[i] = malloc(strlen(word)+1); /* allocate memory here */
strcpy(list[i], word); /* copying the source string content to dest string content */
}
И как только вы закончите динамическую память, освободите динамически выделенную память, вызвав free()
, чтобы избежать утечки памяти.