memmove | Programming Place Plus C言語編 標準ライブラリのリファレンス

C言語編 標準ライブラリのリファレンス memmove

先頭へ戻る

memmove関数

概要 あるメモリアドレスを起点に、一定の文字数を別のメモリアドレスへコピーする。
ヘッダ string.h
形式 void* memmove(void* s1, const void* s2, size_t size);
引数 s1 コピー先の先頭のメモリアドレス。
s2 コピー元の先頭のメモリアドレス。
size コピーする文字数。
戻り値 s1 が返される。
詳細 基本的な意味は strcpy関数と変わらないが、ヌル文字によって打ち切られることがない。
memcpy関数とは異なり、コピー先範囲とコピー元範囲が重複していても動作する。memmove関数の方が安全だが、通常、memcpy関数の方が高速かもしれない。
注意
使用例
#include <stdio.h>
#include <string.h>

int main(void)
{
    char s1[] = "abcdefg";

    printf( "%s\n", memmove( &s1[0], &s1[3], 4 ) );

    return 0;
}

実行結果:

defgefg
関連 コピー先範囲とコピー元範囲が重なり合わない場合は、memcpy関数が使える。 文字列のコピーならば、strcpy関数strncpy関数が使える。
文字をワイド文字とみなして同様の処理を行う wmemmove関数がある。
解説章


参考リンク



更新履歴

'2018/4/22 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

'2018/4/11 全体的に文章を見直し修正。

'2018/2/22 「サイズ」という表記について表現を統一。 型のサイズ(バイト数)を表しているところは「大きさ」、要素数を表しているところは「要素数」。

'2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS