開発現場では、受信データなどのデータをコピーしたい場面が、よくあります。
今回は、そういった場面で使用する、memcpy 関数について紹介します。
プログラミング初心者が読んでおくべき本 3選
プログラミング初心者にとって、日々の業務は難易度が高く、つまずくことも多いと思います。
そこで今回は、プログラミング初心者に手助けになるおすすめの本を3冊紹介します。
目次
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言語特有のメモリ操作を身につけていってください。
プログラミング初心者が読んでおくべき本 3選
プログラミング初心者にとって、日々の業務は難易度が高く、つまずくことも多いと思います。
そこで今回は、プログラミング初心者に手助けになるおすすめの本を3冊紹介します。
参考
おすすめ教材