そこそこ眺めた限り。
> fprintf(fp2,"%10c :%3d \n",p->word,p->count);
の%10cが間違い。

その実装では、Am 4 が与えられたとき、
am : 1, 4m : 1という出力になるとおもう。
最初の初期化は止めて、compする前に
NULL文字を詰めてはどうか。

getchをうける c はintであるべき。