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

  • URLをコピーしました!

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

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

スクロールできます
目的講座名到達点レベル/前提想定時間こんな人に評価
まずはC/C++を一気に俯瞰一週間で身につくC/C++言語C/C++の基礎を通しで学び、ゲーム/組み込み/OS基礎にも触れる初心者〜初級13時間C/C++をまとめて体験したい/ポインタでつまずいた経験がある
図解で“ゼロから”C言語イメージでわかる!基礎知識ゼロからのC言語。エンジニアが教えるC言語完全攻略コース。図解中心で基礎→配列/構造体/ポインタまで。終盤はネットワーク等の応用も超初心者〜初級7時間活字が苦手/イメージで理解したい/まずはCだけに集中したい
図解+演習で基礎を速習【C言語基礎マスター速習講座】知識ゼロからポインタまで完全習得!豊富な図解と演習問題で難しい概念も完全理解!“動きの理解”重視でゼロ→ポインタまで。演習問題で定着超初心者〜初級16時間図解多め+演習で短期に基礎固めしたい
目次

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言語特有のメモリ操作を身につけていってください。

参考(おすすめ教材)

一週間で身につくC/C++言語
楽天ブックス
¥2,728 (2025/10/13 11:27時点 | 楽天市場調べ)
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

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

目次