#navi(contents-page-name): No such page: メモリ

構造体の内容をコピーする・memcpyは使わない!

構造体のコピーを作るとき、memcpy関数を使用して複製をつくるようにコードを書いている人も多いと思います。
gccはANSI準拠なので、代入式で構造体の複製を作れるのはしっているでしょうか?
以下にC言語サンプルソースを記します。

c-top.html is not found or not readable.

関連記事

代入式を使った構造体の複製

&ref(): File not found: "struct_cp.c" at page "メモリ/構造体の内容をコピーする・memcpyは使わない!"; (改行コードLF)

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

struct INT_MEMBERS {
    int a;
    int b;
    int c;
};

int main(void)
{
    struct INT_MEMBERS src, dest;

    src.a = 1;
    src.b = 2;
    src.c = 3;

    dest = src;    /* struct copy */

    printf("dest.a = %d\n", dest.a);
    printf("dest.b = %d\n", dest.b);
    printf("dest.b = %d\n", dest.c);

    return 0;
}

上記のC言語サンプルコードのコンパイルと実行結果を記します。

$ gcc struct_cp.c -o struct_cp
$ ./struct_cp 
dest.a = 1
dest.b = 2
dest.b = 3

memcpyを使って構造体のコピーを作らない理由は、バグを少なくするためです。
誤ってmemcpyのsrc,destに構造の異なる構造体を指定しコピーした場合は、メモリ破壊をしてしまいます。
しかし、代入式の場合であれば、コンパイル時にエラーとなるためコードのミスを簡単に見つけることができます。

以上、構造体のコピーはmemcpyを使わない!でした。

c-btm.html is not found or not readable.

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS