본문 바로가기
C/C Library

memmove

by memora 2024. 6. 18.

Index로 돌아가기

 

【기  능】 메모리에 지정한 바이트수 만큼 문자를 복사하는 기능
 
 【소  속】 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

 

 

Index로 돌아가기

반응형

'C > C Library' 카테고리의 다른 글

strcat  (0) 2024.06.22
strlen  (2) 2024.06.19
strcmp  (2) 2024.06.17
strncpy  (1) 2024.06.17
strcpy  (2) 2024.06.07