Today
-
Yesterday
-
Total
-
  • 💡 [C언어] memcpy 함수 설명 및 다양한 예시
    | 프로그래밍 분야/C 2021. 5. 4. 14:31

    💡 man memcpy

    NAME
         memcpy -- copy memory area

    LIBRARY
         Standard C Library (libc, -lc)

    SYNOPSIS
         #include <string.h>

         void *
         memcpy(void *restrict dst, const void *restrict src, size_t n);

    DESCRIPTION
         The memcpy() function copies n bytes from memory area src to memory area dst.  If dst
         and src overlap, behavior is undefined.  Applications in which dst and src might overlap
         should use memmove(3) instead.

    RETURN VALUES
         The memcpy() function returns the original value of dst.

    SEE ALSO
         bcopy(3), memccpy(3), memmove(3), strcpy(3), wmemcpy(3)

    STANDARDS
         The memcpy() function conforms to ISO/IEC 9899:1990 (``ISO C90'').

    memcpy() 함수는 string.h 에 정의되어 있으며, 소스 주소의 값을 정해준 크기만큼 참조하여 목적 주소에 복사(copy)하는 함수이다.

     

    void *memcpy(void *restrict dst, const void *restrict src, size_t n);

    dst : 목적 주소

    src : 소스 주소

    n : 복사할 데이터 크기(바이트 단위)

    리턴값은 dst의 주솟값이다.

     

    size_t 에 관한 포스팅)

     

    [C/C++] size_t 자료형의 정의

    size_t 아래는 C99의 원문이다. size_t can store the maximum size of a theoretically possible object of any type. 즉, 32비트 환경에서는 32비트, 64비트 환경에서는 64비트의 unsigned 변수로써 다음과 같..

    meoru-tech.tistory.com

     

    💡 테스트케이스

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    <<TEST ~ memcpy>>
     
    ---------- memcpy(str, str1, 8)
    Original    :    [str]  Hello World!
               [str1] Hello !!!!!!
    Result      :   [str]  Hello !!rld!
     
    ---------- memcpy(str, str1, 4)
    Original    :    [str]  Hello World!
               [str1] Wow
    Result      :    [str]  Wow
     
    ---------- memcpy(list, list1, sizeof(list1))
    Original    :    [list]  {0, 1, 2, 3, 4, 5, 6, 7}
               [list1] {0, 1, 2, 42, 4, 5, 6, 24}
    Result      :    {0, 1, 2, 42, 4, 5, 6, 24}
     
    ---------- memcpy(list, list1, sizeof(int) * 4)
    Original    :    [list]  {0, 1, 2, 3, 4, 5, 6, 7}
               [list1] {0, 1, 2, 42, 4, 5, 6, 24}
    Result      :    {0, 1, 2, 42, 4, 5, 6, 7}
     
    ---------- memcpy(list, list1, sizeof(int) * 4 - 3)
    Original    :    [list]  {0, 1, 2, 3, 4, 5, 6, 7}
               [list1] {0, 1, 2, 1042, 4, 5, 6, 24}
    Result      :    {0, 1, 2, 18, 4, 5, 6, 7}





    cs

     

    💡 예외 상황

    복사받는 주소의 범위와 소스 주소의 범위가 겹치면 안된다. 그런 경우 memmove() 를 이용해줘야한다. 요즘은 실행은 잘 된다고 하던데...

sangilyoon.dev@gmail.com