【기 능】 메모리에 지정한 바이트수 만큼 문자를 복사하는 기능
【소 속】 string.h
#include <string.h>
【서 식】
void *memmove(void *tar, const void *src, size_t n);
【설 명】
1) src(메모리 블럭)의 선두 번지로 부터 tar(메모리 블럭)의 선두 번지로
n바이트분의 문자를 복사한다. 복사된 문자열의 후미에 공백문자를 추가 하지 않는다.
2) src, tar를 문자열이 아닌 메모리 블럭으로 인식하기 때문에 도중에 공백문자가 있어도
복사된다.
3) src와 tar의 어드레스 영역이 겹쳐 있을 때도 memcpy와 다르게, 문제없이 복사한다.
【인 수】
tar : 복사될 메모리 블럭의 선두 어드레스
src : 복사할 메모리 블럭의 선두 어드레스
n : 복사할 바이트 수
【리턴 값】
tar의 값
【사용 예】
#include <stdio.h>
#include <string.h>
#include <stdint.h>
int main()
{
uint8_t src1[] = "1234567890";
uint8_t src2[] = "1234567890";
uint8_t tar1[] = "ABCDEFGHIJ";
uint8_t *psrc;
uint8_t *ptar;
char *pRetn;
src2[2] = '\0';
printf("src1 = %s, src2 = %s, tar1 = %s\n", src1, src2, tar1);
printf("\n");
pRetn = memmove(tar1, src1, 4);
printf("src1 = %s, tar1 = %s\n", src1, tar1);
printf("return = %s\n", pRetn);
printf("\n");
pRetn = memmove(tar1, src2, 4);
printf("src2 = 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x,\n\
tar1 = 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
src2[0], src2[1], src2[2], src2[3], src2[4], src2[5], src2[6], src2[7], src2[8], src2[9],
tar1[0], tar1[1], tar1[2], tar1[3], tar1[4], tar1[5], tar1[6], tar1[7], tar1[8], tar1[9] );
printf("return = %s\n", pRetn);
printf("\n");
psrc = src1;
ptar = src1 + 2;
printf("address for psrc = 0x%x, string = %s\n", psrc, psrc);
printf("address for ptar = 0x%x, string = %s\n", ptar, ptar);
pRetn = memmove(ptar, psrc, 4);
printf("address for psrc = 0x%x, string = %s\n", psrc, psrc);
printf("address for ptar = 0x%x, string = %s\n", ptar, ptar);
【결 과】
src1 = 1234567890, src2 = 12, tar1 = ABCDEFGHIJ
1)
src1 = 1234567890, tar1 = 1234EFGHIJ
return = 1234EFGHIJ
2)
src2 = 0x31 0x32 0x0 0x34 0x35 0x36 0x37 0x38 0x39 0x30,
tar1 = 0x31 0x32 0x0 0x34 0x45 0x46 0x47 0x48 0x49 0x4a
return = 12
3)
address for psrc = 0x61fef9, string = 1234567890
address for ptar = 0x61fefb, string = 34567890
address for psrc = 0x61fef9, string = 1212347890
address for ptar = 0x61fefb, string = 12347890