Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C / C++のmemmove()関数とは?使い方とサンプルコードを解説

memmove()関数は、メモリブロック全体をある位置から別の位置へ移動(コピー)するために使用される標準ライブラリ関数です。移動元(ソース)と移動先(デスティネーション)は、それぞれポインタによって指定します。C言語では「string.h」ヘッダーファイル内で宣言されており、C++でも「cstring」ヘッダーをインクルードすることで利用できます。

memmove()関数の構文

memmove()関数の構文は以下の通りです。

void *memmove(void *dest_str, const void *src_str, size_t number)

各引数の説明

dest_str − コピー先(移動先)となる配列へのポインタです。

src_str − コピー元(移動元)となる配列へのポインタです。

number − ソースからデスティネーションへコピーするバイト数です。

memmove()関数の使用例

以下は、C言語でmemmove()関数を使用したサンプルプログラムです。

#include <stdio.h>
#include <string.h>
int main () {
    char a[] = "Firststring";
    const char b[] = "Secondstring";
    memmove(a, b, 9);
    printf("New arrays : %s\t%s", a, b);
    return 0;
}

実行結果

New arrays : SecondstrngSecondstring

プログラムの解説

上記のプログラムでは、まずchar型の配列を2つ初期化しています。その後、memmove()関数を使って、コピー元の文字列「b」からコピー先の文字列「a」へ9バイト分のデータをコピーしています。

char a[] = "Firststring";
const char b[] = "Secondstring";
memmove(a, b, 9);

この処理により、配列「a」の先頭9バイトが「b」の内容で上書きされ、残りの部分は元の文字列がそのまま維持されるため、「Secondstrng」という結果が得られます。

memcpy()との違い

memmove()関数はmemcpy()関数とよく似ていますが、大きな違いとしてメモリ領域が重なっている場合でも安全にコピーできるという点が挙げられます。memcpy()はコピー元とコピー先の領域が重なる場合の動作が未定義ですが、memmove()は一時的なバッファを介して処理を行うため、オーバーラップが発生しても正しく動作します。そのため、コピー元とコピー先が重なる可能性がある場合は、memmove()を使用することが推奨されます。

  1. C/C++のmbsrtowcs()関数とは?構文・パラメータ・戻り値と実例を解説

    本記事では、C++ STLに含まれるstd::mbsrtowcs()関数の仕組み、構文、および具体的な使用例について詳しく解説します。 std::mbsrtowcs()とは? std::mbsrtowcs()は、C++ STLに組み込まれている関数で、<cwchar>ヘッダーファイル内で定義されています。関数名のmbsrtowcs()は「multibyte string to wide character string(マルチバイト文字列からワイド文字列への変換)」を意味し、再開可能な変換状態を維持しながら、NULL終端されたマルチバイト文字列をワイド文字列表現へと変換します。この

  2. C/C++のsystem()関数とは?使い方と実行例を徹底解説

    この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。 system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。 この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。 構文 system()関数の構文は以下の通りです。 int