mallocを呼んだらfreeしないとメモリリークしますよ。
この場合、配列で用は足りるかと。

strncatのところで、\rが残ってませんか?win鯖なら別ですが。

fcloseするならcloseしなくてもよかった覚えがありますが、
これは曖昧です。