strncpy、strncatではまる

今日、研究のためのプログラムを苦手なCで書いてたんだけど、そのときにはまったことについて。
ある文字列をchar型の配列にコピーしようとstrncpyを次のように使った。

strncpy(logfilename, logFileName_0, strlen(logFileName_0))

logFIleName_0ってのにコピーしたい文字列が入っていて、logfilenameにコピーを行う。logfilenameはlogFileName_0をコピーできるだけの大きさはある。こう書いてコンパイルしたら普通に通ったんだけど、いざ実行してみと、コンソールが思い切り文字化けする。閉じるしかない。
なんでコンソールが文字化けしだしたのか理由はわからなかったけど、プログラムの問題点はわかった。strncpyでは第3引数でコピーできる最大文字数を指定するんだけど、このときその値がコピーする文字列の長さ以下の場合、終端文字(\0)が入らない。実際第3引数を「strlen(logFileName_0) + 1」に直すとコンソールも文字化けしなくなる。
strncatでも同じ。
これに気がつくのにものすごく時間がかかった。だって、ものすごく大きなプログラムの1ソースにパッチを当てるべく、ソースを修正しているんで、他のソースに原因している問題かもしれないといろいろと調べまわってたから。普段Javaでしか書いて無いからこんなことではまるんだろうなぁ。