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

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

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

なお、memcpy()は高速化のため、コピー領域の重なりやバッファオーバーフローのチェックを行いません。その点は使用時に注意が必要です。

memcpy()の構文

void *memcpy(void *dest_str, const void *src_str, size_t number);

各引数の意味

dest_str − コピー先となる配列へのポインタ。
src_str − コピー元となる配列へのポインタ。
number − コピー元からコピー先へコピーするバイト数。

戻り値としては、コピー先のポインタ(dest_str)が返されます。

memcpy()の使用例

#include <stdio.h>
#include <string.h>

int main(void) {
    char a[] = "Firststring";
    const char b[] = "Secondstring";

    memcpy(a, b, 5);

    printf("New arrays : %s\t%s", a, b);
    return 0;
}

実行結果

New arrays : Seconstring	Secondstring

プログラムの解説

このプログラムでは、まずchar型の配列を2つ用意し、それぞれ文字列で初期化しています。その後、memcpy()関数を呼び出して、コピー元の文字列bからコピー先の文字列aへ、先頭5バイト分をコピーしています。

char a[] = "Firststring";
const char b[] = "Secondstring";
memcpy(a, b, 5);

コピー後、配列aの内容は先頭5文字が「Secon」に置き換わり、「Seconstring」となります。残りの部分は元の配列aの内容がそのまま保持されるため、このような結果になります。

注意点

memcpy()を使用する際には、以下の点に留意してください。

  • コピー先のバッファサイズが、コピーするバイト数以上であることを必ず確認する(バッファオーバーフロー防止)。
  • コピー元とコピー先のメモリ領域が重なる場合は、動作が未定義になるため、代わりにmemmove()を使用する。
  • 終端のNULL文字('\0')は自動的にはコピーされないため、文字列として扱う場合は必要に応じて手動で付加する。
  1. C/C++のmemcpy()関数の使い方と実例解説

    この記事では、C++ STLにおけるmemcpy()関数の動作、構文、および具体的な使用例について詳しく解説します。 memcpy()とは? memcpy()関数は、C++ STLに組み込まれた標準関数の一つで、<cstring>ヘッダーファイルで定義されています。この関数はメモリブロックをコピーするために使用され、あるメモリ位置から別のメモリ位置へ、指定されたバイト数分のデータを転送します。 関数の実行結果は、データのバイナリコピーとなります。重要な点として、memcpy()は終端のNULL文字やその他の終端記号をチェックしません。単純にソースから指定されたバイト数(num)をそ

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

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