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