Loose-Info.com

Last Update 2019/12/24


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}