Last Update 2012/07/05
メモリ領域のコピーを行います。strcpy()と異なり、終端文字「\0」の付加は行いません。
コピー元とコピー先の領域が重なる可能性がある場合は動作が不定となるため、memmove()を使用します。
コピー元とコピー先の領域が重なる可能性がある場合は動作が不定となるため、memmove()を使用します。
戻り値1 = memcpy( 引数1 , 引数2 , 引数3 )
戻り値1 :
void *
引数1へのポインタ
引数1, 引数2 :
void *
引数2で参照されるメモリ領域の内容を引数1で参照されるメモリ領域へコピーする
引数3 :
size_t
コピーの対象となるバイト数
(例)
#include <stdio.h>
#include <string.h>
struct struct_test
{
char str1[10];
char str2[20];
};
int main()
{
struct struct_test st1 = {"abcde", "123456"};
struct struct_test st2 = {"12345", "abcdef"};
printf("コピー前 st1: {%s %s}\n", st1.str1, st1.str2);
struct struct_test *s_temp = (struct struct_test *)memcpy(&st1, &st2, sizeof(st1));
printf("コピー後 st1: {%s %s}\n", st1.str1, st1.str2);
printf("戻り値 s_temp {%s %s}\n", s_temp->str1, s_temp->str2);
return 0;
}
実行結果
コピー前 st1: {abcde 123456}
コピー後 st1: {12345 abcdef}
戻り値 s_temp {12345 abcdef}