fgets関数でファイルを一行ずつ読み込んでいきますが、一行読み込んだら次にまたfgetsを実行したとき次の行を読み込むことになっているのは仕様ですか?
同じ行を読み直すとか、そういう場合には困るような気がするんですが(そういうことする必要ないか?)

ってかよくFILE *fp = fopen(hoge)ってので*fpがつかわれますが、この*fpの先の実体はどうなってるんでしょうか?