Проблема в вашем printf()
в конце occorrenze()
printf("\n%s\n%d\n",p->sbuffer, p->occ);
На данный момент p
равен NULL, потому что ваш for
цикл завершен
for (p = first; p != NULL; p = p->next) {
Код для поиска совпадений в основном правильный, я бы просто немного его изменил (вам понадобится всего один цикл) и переместил бы его на insert()
, чтобы вам не нужно было добавлять слово a во второй раз, если он уже есть в списке, occorenze()
может просто просмотреть список и напечатать слова и их значение occ
:
void insert(char *tkn) {
struct node *new_node;
new_node = (struct node*)malloc(sizeof(struct node));
for (struct node *n = first; n != NULL; n = n->next) {
if (strcmp(tkn, n->sbuffer) == 0) {
n->occ++;
return;
}
}
strcpy(new_node->sbuffer, tkn);
new_node->occ = 1;
new_node->next = first;
first = new_node;
}
void occorrenze() {
for (struct node*n = first; n != NULL; n = n->next) {
printf("%d %s\n", n->occ, n->sbuffer);
}
}