TOP - C言語 - string.h - memmove()

バイト文字列をコピーします。終端文字「\0」の付加は行われません。
バイト文字列が重複していてもコピー可能です。

戻り値1 = memmove(引数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("[1]コピー前 st1: {%s %s}\n", st1.str1, st1.str2);
    struct struct_test *s_temp = (struct struct_test *)memmove(&st1, &st2, sizeof(st1));
    printf("[1]コピー後 st1: {%s %s}\n", st1.str1, st1.str2);
    printf("[1]戻り値 s_temp {%s %s}\n\n", s_temp->str1, s_temp->str2);

    printf("[2]コピー前 st1: {%s %s}\n", st1.str1, st1.str2);
    char *pc1 = &st1.str1[0];
    char *pc2 = &st1.str1[10];
    s_temp = (struct struct_test *)memmove(pc1, pc2, sizeof(st1.str1));
    printf("[2]コピー後 st1: {%s %s}\n", st1.str1, st1.str2);
    printf("[2]戻り値 s_temp {%s %s}\n\n", s_temp->str1, s_temp->str2);

    return 0;
}

実行結果
[1]コピー前 st1: {abcde 123456}
[1]コピー後 st1: {12345 abcdef}
[1]戻り値 s_temp {12345 abcdef}

[2]コピー前 st1: {12345 abcdef}
[2]コピー後 st1: {abcdef abcdef}
[2]戻り値 s_temp {abcdef abcdef}


Copyright(C) 2006-2012 CLAYPOT. All Rights Reserved.