【C言語】memcpy 関数でメモリのデータをコピーする

  • URLをコピーしました!

開発現場では、受信データなどのデータをコピーしたい場面が、よくあります。

今回は、そういった場面で使用する、memcpy 関数について紹介します。

目次

memcpy 関数とは

memcpy 関数は、指定のメモリサイズ分メモリをコピーする関数です。

memcpy 関数の形式

memcpy 関数の形式は、以下のようになっています。

#include <string.h>

void *memcpy(void *buf1, const void *buf2, size_t n);

“string.h”をインクルードして使用します。

また、引数は以下の値を設定します。

第一引数コピー先のポインタ
第二引数コピー元のポインタ
第三引数コピーするメモリサイズ

memcpy 関数でなにができるの?

それでは実際にmemcpy 関数の使い方をみていきましょう。

memcpy関数を使って文字列をコピー

文字列をコピーするときにも、memcpy 関数を使用します。

実際にmemcpy 関数を使用したコードです。

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


int main(void){

	char moji_1[] = "abcdefg";
	char moji_2[] = "ABCDEFG";

	printf("文字列 moji_2: %s\n", moji_2);
	memcpy(moji_2, moji_1, 7);
	printf("文字列 moji_2: %s\n", moji_2);

	return 0;
}

実行結果

文字列 moji_2: ABCDEFG
文字列 moji_2: abcdefg

文字列 moji_2 に文字列 moji_1 の “abcdefg”がコピーされています。

memcpy 関数を使って配列データをコピー

配列をコピーするときにもmemcpy 関数を使用します。

以下、memcpy 関数を使用し、配列データをコピーするコードです。

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


int main(void){

	int ary_1[5] = {0, 1, 2, 3, 4};
	int ary_2[5] = {5, 6, 7, 8, 9};
	int i;

	// 配列 ary_2 の出力
	printf("配列 ary_2:");
	for(i = 0; i < 5; i++){
		
		printf("%d", ary_2[i]);
	}
	printf("\n");
	
	// 配列 ary_1のデータを配列ary_2に配列 ary_1のサイズ分コピー
	memcpy(ary_2, ary_1, sizeof(ary_1));

	// 再び配列 ary_2 の出力
	printf("配列 ary_2:");
	for(i = 0; i < 5; i++){
		
		printf("%d", ary_2[i]);	
	}
	printf("\n");
	
	return 0;
}

実行結果

配列 ary_2:56789
配列 ary_2:01234

配列 ary_1 のデータが配列 ary_2にコピーされました。

コピーするサイズについて今回は、sizeof 演算子を使用しています。

sizeof 演算子を使用することで、配列データをまるごとコピーできます。

sizeof 演算子について、詳しく知りたい方は、こちらをみてください。

まとめ

memcpy 関数を使って、メモリを操作できるようになると、

プログラムの幅が大きく広がります。

ぜひC言語特有のメモリ操作を身につけていってください。

参考

おすすめ教材

楽天ブックス
¥2,728 (2024/12/18 12:47時点 | 楽天市場調べ)
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

エンジニア。20代。組み込みエンジニアとして働き始めるも、働き方や業務内容に限界を感じ、 AI,Web3エンジニアを目指して勉強中。 エンジニアとして思うことや、学んだことを発信します。

目次