このエントリーをはてなブックマークに追加


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

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


スポンサーリンク

関連記事

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

filestruct_cp.c (改行コード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を使わない!でした。


スポンサーリンク

添付ファイル: filestruct_cp.c 615件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 21:01:00