>> C言語関数一覧トップに戻る
今回はC言語のmemmove関数の使い方について説明します。
memmove関数は指定したバイト数のメモリをコピー(移動)する関数です。
■書式
#include <string.h>
void *memmove(void *buf1, const void *buf2, size_t n);
第一引数はコピー先のメモリのポインタ
第二引数はコピー元のメモリのポインタ
第三引数はコピーするサイズ
をそれぞれ指定します。
memcpyもメモリをコピーしますが、memmoveもコピーを行います。
違うのはbuf1とbuf2が重なっているときの動作です。
memcpyの場合はそのときの動作は未定義ですが、memmoveを行うと正しくコピーされます。
つまり移動しているように見えます。
■サンプルコード
コピー後のbuf文字列→ABCABCFG
コピー先を「buf+3」としているので、bufの先頭ポインタから3バイトずれた位置を指定しています。
その位置にbufの先頭から3バイトだけコピーしているので、「ABCABCFG」という文字に書き変わります。
これはmemcpyでは未定義で動作しない可能性があるので、コピー元と先が重なる場合はmemmoveを使いましょう。
>> 【C言語 memset 使い方】に進む
>> C言語関数一覧トップに戻る
C言語 memmove 使い方
memmove関数は指定したバイト数のメモリをコピー(移動)する関数です。
■書式
#include <string.h>
void *memmove(void *buf1, const void *buf2, size_t n);
第一引数はコピー先のメモリのポインタ
第二引数はコピー元のメモリのポインタ
第三引数はコピーするサイズ
をそれぞれ指定します。
memcpyもメモリをコピーしますが、memmoveもコピーを行います。
違うのはbuf1とbuf2が重なっているときの動作です。
memcpyの場合はそのときの動作は未定義ですが、memmoveを行うと正しくコピーされます。
つまり移動しているように見えます。
■サンプルコード
#include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char buf[] = "ABCDDEFG"; //bufの先頭から3バイト進めた位置にbufの先頭から3バイトコピー memmove(buf+3,buf,3); //表示 printf("コピー後のbuf文字列→%s\n",buf); return 0; }■実行結果
コピー後のbuf文字列→ABCABCFG
コピー先を「buf+3」としているので、bufの先頭ポインタから3バイトずれた位置を指定しています。
その位置にbufの先頭から3バイトだけコピーしているので、「ABCABCFG」という文字に書き変わります。
これはmemcpyでは未定義で動作しない可能性があるので、コピー元と先が重なる場合はmemmoveを使いましょう。
>> 【C言語 memset 使い方】に進む
>> C言語関数一覧トップに戻る