テクノロジーの雑学・豆知識

PC・スマホ、プログラミング、電子機器、電化製品についての雑学・うんちく・豆知識・トリビアを集めたサイトです。気になった記事や文章を個人のメモとして投稿しています

【C言語文例】メモリ領域をコピーするmemcpy()の使い方

ヘッダ:string.h

書式:void *memcpy(void *dest, const void *src, size_t n);

引数:dest … コピー先のメモリのポインタ

src:… コピー元のメモリのポインタ

n:… コピーするバイト数

戻り値:destのポインタ

解説:メモリ領域srcの先頭からnバイトをメモリ領域destにコピーする関数。コピー元のメモリ領域とコピー先のメモリ領域が重なる場合の動作は保証されていないので注意する必要がある。メモリ領域が重なっても問題ない場合は、memmove()を使用するほうが良い。

 

<サンプルプログラム>

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

#define BUF_SIZE 16

int main()
{
// 変数定義
char buf1[BUF_SIZE];
char buf2[BUF_SIZE];

// 変数初期化
memset(buf1, '\0', BUF_SIZE);
memset(buf2, '\0', BUF_SIZE);

// メモリ領域を特定の文字で埋める
memset(buf1, 'b', 4); // buf1の最初の4バイトをaにする
memset(buf1, 'a', 2); // buf1の最初の2バイトをbにする

// 配列の内容を表示
printf("配列の要素を表示(コピー前)。\n");
printf("buf1:%s\n", buf1);
printf("buf2:%s\n", buf2);

// メモリをコピーする
memcpy(buf2, buf1, 3); // buf1の先頭3バイトをbuf2にコピーする

// 配列の内容を表示
printf("配列の要素を表示(コピー後)。\n");
printf("buf1:%s\n", buf1);
printf("buf2:%s\n", buf2);

return 0;
}

/****************************************************************************/

 

<実行結果>