koala написав:А взагалі глобальні змінні - зло.
Ну якщо вона «глобальна у файлі», але схована static-ом від інших файлів, то для відповідного модуля це те ж саме, що private-static член класу для С++, тому однозначно «зло» я не казав би.
Хоча тут і краще було б
// dictionary.h
struct dictionary; // саме так, лише forward declaration, це приватна справа dictionary.c
struct dictionary *create_dictionary();
void free_dictionary(struct dictionary *p);
ну і всі інші операції аналогічно, а у файлі, який працює зі словником, використовувати лише вказівники, тоді нутрощі структури і не потрібні.
Але у даному конкретному випадку код, який перевіряє завдання, розрахований на те, що словник один і десь схований («глобальний у іншому файлі»). Всі виклики (створення dictionary з текстового файлу, звільнення пам'яті) на це розраховані.