>> C言語関数一覧トップに戻る

C言語 memmove 使い方

今回は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言語関数一覧トップに戻る