본문으로 바로가기

[C Library] memcpy 사용법!

category Library/c Library 2018. 11. 12. 00:31

memcpy는 메모리 영역을 복사하는 함수입니다.


 함수명

 memcpy

 헤더

 string.h

  형태 

 void *memcpy( void *new, const void *old, size_t count )

 인자

 new: 복사 당할 새 버퍼 

 old: 복사할 버퍼
 count:복사할 문자수 ( old의 문자수 : byte 단위 )

 반환

 new의 포인터를 반환, 실패시 NULL


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
 
int main()
{
    int dataOne[] = { 12345 };
    int dataTwo[] = { 678910 };
 
    printf("dataTwo 처음 데이터: ");
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", dataTwo[i]);
    }
 
    memcpy(dataTwo, dataOne, sizeof(int* (sizeof(dataOne) / sizeof(dataOne[0])) );
        
    printf("\ndataTwo 바뀐 데이터: ");
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", dataTwo[i]);
    }
 
    return 0;
cs


<결과>




<예제2>
memcpy는 메모리를 복사하는 역할을 한다고 말씀드렸는데요.
memcpy를 사용할때는 주로 전체를 복사하는 경우가 많지만 때론
특정 부분만 복사해서 쓸 경우가 있습니다. 

예제2 에선 특정 부분만 복사하는것을 보여 드리겠습니다.
특별하진 않지만 포인터의 개념을 잘 알고 있어야 이해가 쉽습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <string.h>
 
int main()
{
    int dataOne[] = { 12345 };
    int dataTwo[] = { 678910 };
 
    printf("dataTwo 처음 데이터: ");
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", dataTwo[i]);
    }
 
    memcpy(dataTwo+3, dataOne+24);
        
    printf("\ndataTwo 바뀐 데이터: ");
    for (int i = 0; i < 5; i++)
    {
        printf("%d ", dataTwo[i]);
    }
    printf("\n");
    return 0;
}
cs


<예제2 결과>


바뀐 부분은 

예제1 memcpy(dataTwo, dataOne, sizeof(int) * (sizeof(dataOne) / sizeof(dataOne[0])) );
->
예제2 memcpy(dataTwo+3, dataOne+2, 4); 입니다.
dataOne,dataTwo는 배열입니다. 
각 배열 dataOne[0],dataOne[1],dataOne[2]은 각자의 주소를 가지고 있죠!
 memcpy(dataTwo+3, dataOne+2, 4);  의 의미는
dataOne+2 즉, dataOne[2]의 값을 dataTwo[3]의 메모리에 복사하겠다.
3번째 인수 4는 4byte를 뜻하니 한개만 복사하겠다는 의미입니다.



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

[C Library] realloc() 사용법!  (1) 2018.11.16
[C Library] malloc 사용법!!  (0) 2018.11.12