My предположим, , что это не работает, потому что вы не добавили нулевой терминатор должным образом в массив word
.
ВВо втором примере вы просто скопировали код из первого рабочего кода и забыли изменить один важный бит:
memset(word, 0, sizeof(word));
В функции add_word
переменная word
является указателем , а sizeof(word)
возвращает размер самого указателя, а не то, на что он указывает.
Лучшее решение, гарантирующее, что строка в word
всегда заканчивается нулем, - это фактически иявным образом добавьте терминатор в нужное место, если вы хотите рассматривать его как строку:
if (isspace(text[i])) {
word[k] = '\0'; // Add null-terminator
add_word(words, word, &length, &k);
}