memmove


目次に戻る


先日のmemcpyに引き続き、今日もメモリコピー関係の関数を紹介します。今日紹介する 関数 memmove はmemcpyの欠点を補う為に用意された関数です。
/* memcpyを使うと結果がわからなくなる例 */
char buff[30]="abcdefghijklmnopqrstuvwxyz";
char *p = &buff[1];

printf("buff = %s , p = %s\n",buff,p);

memcpy( p , buff , 15 );

printf("buff = %s , p = %s\n",buff,p);

こういう場合はmemcpyではなく、memmoveを使用するとうまくいきます。
/* memmoveを使うとうまくいく。 */
char buff[30]="abcdefghijklmnopqrstuvwxyz";
char *p = &buff[1];

printf("buff = %s , p = %s\n",buff,p);

memmove( p , buff , 15 );

printf("buff = %s , p = %s\n",buff,p);

memmove は処理速度を犠牲にしてmemcpyを使った場合に起こる不具合を回避してい ます。
しかし、こんなもの本当に使うのか?と思うでしょう。使うんですよ。例えば、画像デ ータを配列に保存しておいて、これを1ドット左にスクロールさせたい。等という場合は memmoveは便利です。


目次に戻る