Running this through `debug50` with a 143,091 word dictionary and a 19,190 word text would be....pick a word.....daunting. Try debugging with a one word file used as dictionary and text (something like `./speller word.txt word.txt`). Put a break point at `check`. Add a watch expression for `word_copy[i]` and step through. Or study this code carefully to figure out why word_copy is never populated correctly: for ( int i = 0; i < length; i++) { if (isupper(word_copy[i])) { word_copy[i] = tolower(word_copy[i]); } else { word_copy[i] = word_copy[i]; } }