【C言語】memcpy関数の使い方をわかりやすく詳しく解説

この記事では、C言語のmemcpy関数の使い方について詳しく解説します。

memcpy関数を使用することで、配列や構造体、メモリ領域のコピーを簡単に行うことができます。

また、注意点も紹介するので、安全なコードを作成するためのポイントも学ぶことができます。

初心者の方にもわかりやすく解説していきますので、ぜひ参考にしてください。

目次から探す

memcpy関数とは

memcpy関数は、C言語で提供されている標準ライブラリ関数の一つです。

この関数は、メモリブロックの内容を別のメモリブロックにコピーするために使用されます。

memcpy関数は、文字列や配列などのデータを効率的にコピーするために利用されることが多いです。

memcpy関数の基本的な使い方

memcpy関数は、C言語でメモリのコピーを行うための関数です。

この関数を使用することで、あるメモリ領域の内容を別のメモリ領域にコピーすることができます。

memcpy関数のシンタックス

memcpy関数の基本的なシンタックスは以下の通りです。


void *memcpy(void *dest, const void *src, size_t n);
引数名説明
destコピー先のメモリブロックの先頭アドレスを指定する
srcコピー元のメモリブロックの先頭アドレスを指定する
nコピーするバイト数を指定する

memcpy関数の戻り値

memcpy関数は、コピー先のメモリ領域の先頭アドレスを返します。

ただし、エラーが発生した場合はNULLを返します。

以下に、memcpy関数の基本的な使い方の例を示します。


#include <stdio.h>
#include <string.h>
int main() {
    char src[] = "Hello, World!";
    char dest[20];
    memcpy(dest, src, strlen(src) + 1);
    printf("コピー先の文字列: %s\n", dest);
    return 0;
}

上記の例では、srcという文字列をdestという配列にコピーしています。

コピー元の文字列の長さに+1をしているのは、ヌル文字(‘\0’)もコピーするためです。

コピー先の文字列を出力すると、正しくコピーされていることが確認できます。

コピー先の文字列: Hello, World!

以上がmemcpy関数の基本的な使い方についての説明です。

memcpy関数は、メモリのコピーを行う際に便利な関数ですので、ぜひ活用してみてください。

memcpy関数の具体的な使用例

配列のコピー

配列のコピーは、memcpy関数を使用することで簡単に行うことができます。

以下に、配列のコピーの具体的な使用例を示します。


#include <stdio.h>
#include <string.h>
int main() {
    int srcArray[] = {1, 2, 3, 4, 5};
    int destArray[5];
    memcpy(destArray, srcArray, sizeof(srcArray));
    printf("コピー元の配列: ");
    for (int i = 0; i < sizeof(srcArray) / sizeof(int); i++) {
        printf("%d ", srcArray[i]);
    }
    printf("\nコピー先の配列: ");
    for (int i = 0; i < sizeof(destArray) / sizeof(int); i++) {
        printf("%d ", destArray[i]);
    }
    return 0;
}

上記のコードでは、srcArrayという配列をdestArrayにコピーしています。

memcpy(destArray, srcArray, sizeof(srcArray)) という形式で、destArraysrcArrayの内容をコピーしています。

sizeof(srcArray) は、srcArrayのサイズをバイト単位で取得するために使用しています。

実行結果は以下のようになります。

コピー元の配列: 1 2 3 4 5
コピー先の配列: 1 2 3 4 5

構造体のコピー

構造体のコピーも、memcpy関数を使用することで簡単に行うことができます。

以下に、構造体のコピーの具体的な使用例を示します。


#include <stdio.h>
#include <string.h>
typedef struct {
    int id;
    char name[20];
} Student;
int main() {
    Student srcStudent = {1, "山田太郎"};
    Student destStudent;
    memcpy(&destStudent, &srcStudent, sizeof(Student));
    printf("コピー元の学生: ID=%d, 名前=%s\n", srcStudent.id, srcStudent.name);
    printf("コピー先の学生: ID=%d, 名前=%s\n", destStudent.id, destStudent.name);
    return 0;
}

上記のコードでは、srcStudentという構造体をdestStudentにコピーしています。

memcpy(&destStudent, &srcStudent, sizeof(Student))“という形式で、destStudentsrcStudentの内容をコピーしています。

sizeof(Student) は、構造体Studentのサイズをバイト単位で取得するために使用しています。

実行結果は以下のようになります。

コピー元の学生: ID=1, 名前=山田太郎
コピー先の学生: ID=1, 名前=山田太郎

メモリ領域のコピー

memcpy関数は、単純なデータ型だけでなく、メモリ領域全体のコピーも行うことができます。

以下に、メモリ領域のコピーの具体的な使用例を示します。


#include <stdio.h>
#include <string.h>
int main() {
    char srcString[] = "Hello, World!";
    char destString[20];
    memcpy(destString, srcString, strlen(srcString) + 1);
    printf("コピー元の文字列: %s\n", srcString);
    printf("コピー先の文字列: %s\n", destString);
    return 0;
}

上記のコードでは、srcStringという文字列をdestStringにコピーしています。

memcpy(destString, srcString, strlen(srcString) + 1) という形式で、destStringsrcStringの内容をコピーしています。

“strlen(srcString) + 1は、srcStringの長さにヌル文字を含めたサイズを取得するために使用しています。

実行結果は以下のようになります。

コピー元の文字列: Hello, World!
コピー先の文字列: Hello, World!

以上が、memcpy関数の具体的な使用例です。

配列や構造体、メモリ領域のコピーにおいて、memcpy関数は便利な関数ですので、ぜひ活用してみてください。

1 2

この記事のページ一覧
  1. 現在のページ
目次から探す