開発現場では、受信データなどのデータをコピーしたい場面が、よくあります。
今回は、そういった場面で使用する、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 演算子について、詳しく知りたい方は、こちらをみてください。
あわせて読みたい


【C言語】sizeof 演算子とは 3つの使い方も紹介
今回は、C言語のsizeof 演算子を使用して配列の要素数を取得する方法を紹介します。 さらに、sizeof 演算子の他の使用方法についても紹介しようと思います。 【sizeof …
まとめ
memcpy 関数を使って、メモリを操作できるようになると、
プログラムの幅が大きく広がります。
ぜひC言語特有のメモリ操作を身につけていってください。