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')は自動的にはコピーされないため、文字列として扱う場合は必要に応じて手動で付加する。
-
C/C++のmemcpy()関数の使い方と実例解説
この記事では、C++ STLにおけるmemcpy()関数の動作、構文、および具体的な使用例について詳しく解説します。 memcpy()とは? memcpy()関数は、C++ STLに組み込まれた標準関数の一つで、<cstring>ヘッダーファイルで定義されています。この関数はメモリブロックをコピーするために使用され、あるメモリ位置から別のメモリ位置へ、指定されたバイト数分のデータを転送します。 関数の実行結果は、データのバイナリコピーとなります。重要な点として、memcpy()は終端のNULL文字やその他の終端記号をチェックしません。単純にソースから指定されたバイト数(num)をそ
-
C/C++のsystem()関数とは?使い方と実行例を徹底解説
この記事では、C/C++におけるsystem()関数の基本的な使い方と動作について、具体例を交えながら詳しく解説します。 system()関数は、C/C++標準ライブラリに含まれる関数の一つです。オペレーティングシステムのコマンドプロセッサ(コマンドプロンプト)やターミナルで実行可能なコマンドをプログラムから渡して実行でき、コマンドの処理が完了すると制御をプログラムに戻します。 この関数を使用するには、ヘッダーファイル<stdlib.h>(C++の場合は<cstdlib>)をインクルードする必要があります。 構文 system()関数の構文は以下の通りです。 int