본문 바로가기
C/C Library

memcpy

by memora 2024. 5. 24.

Index로 돌아가기

 

【기  능】 특정(복사 대상) 메모리 블럭의 데이터를 지정 메모리 블럭으로 n바이트 복사

 

소  속 string.h

   #include <string.h>

 

서  식 

   void *memcpy(void *src, const void *tar, size_t n);

 

설  명 

   tar(메모리 블럭) 선두 번지로 부터 n바이트분 데이터를 src(메모리 블럭) 복사한다. 

   그런데, strcpy()하고는 달리 tar의 마지막에 공백문자(\0) 추가하지 않는다.

   , src 단순하게 메모리 블록으로 처리하기 때문에, 데이터 도중에 공백문자(\0)가 포함되어

  있어도 무시하고 지정문자수만큼 복사한다.

   tar와 src의 어드레스가 겹칠때는 복사실패로 끝난다. 이럴경우엔, memmove() 사용하면 올바르게 복사가 된다.

 

 인  수 

  void *tar : 복사되어 받을 메모리 블록

  const void *src : 복사대상(복사 되는) 메모리 불록

  size_t n : 복사할 바이트 

 

 리턴 

  tar 

 

 사용 예

 #include        <stdio.h>

 #include        <string.h>

 

 int main(void)

 {

        char str1[128] = {1,1,1,1,1,1,1};

        char str2[] = "ab\0cde";        /* 도중에 공백문자가 있는 문자열 */

        int i;

       

        printf("복사 실시 전 데이터 확인\n");

        for (i=0; i<7; i++)

                printf("%#x ",str1[i]);

        printf("\n");

       

        memcpy(str1, str2, 5);

 

        printf("복사 실시 후 데이터 확인\n");

        for (i=0; i<7; i++)

                printf("%#x ",str1[i]);

        printf("\n");

 

        return 0;

 }

 

 【실행결과 

 복사 실시 전 데이터 확인

  0x1 0x1 0x1 0x1 0x1 0x1 0x1

 복사 실시 후 데이터 확인

  0x61 0x62 0 0x63 0x64 0x1 0x1

 

 도중에 공백문자 '\0' 가 있어도 복사 된다.

  또, 마지막에 공백문자  '\0' 를 추가 하지 않는다.

 


Index로 돌아가기

반응형

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

strncpy  (1) 2024.06.17
strcpy  (2) 2024.06.07
memchr  (4) 2024.06.03
memcmp  (2) 2024.06.02
memset  (2) 2024.05.29