文字列のコピーに strcpy() 以外、より安全な関数 strncpy がC言語に用意されている。

注意点
① srcの長さがn以上のときにはn文字をコピーするが、このときに '\0' の自動付加は行わないので注意が必要。
② srcの長さがnより少ない場合には、desの中の、後ろの部分に '\0' で埋められる。
③ もし、src と des が重なっている場合には動作は未定義となる。

つまり、strncpy() は文字列のn文字コピーという名前だが、最後のナル文字'\0'が抜けたりするので、気をつけないといけない。

安全のため、こう使うべきだろう。

あるいは、自分で関数をつくってしまう。 ↓お勧め。注意点の3点ともクリア。

'\0'と0とは同一ものと認めるならば(論理的には両者は違うけど)、3行目はつぎのようにも書ける。

余談だが、Unixコマンドのコピーは
 cp source-file target-file
コピー元→コピー先という順番、strncpy() ではコピー先 ← コピー元の順。完全に逆。

何で統一性がないだろう。なぞのひとつ。

Comments are closed.

Post Navigation