memcpy, memmove, memcmp 메모리 관련 함수

memcpy, memmove, memcmp 메모리 관련 함수


이번에는 메모리 관련 함수에 대해서 알아보겠다.

메모리 관련 함수에는 memcpy, memmove, memcmp가 있다.

이 함수들을 사용하려면 string.h 파일을 include 해야 된다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <string.h>
int main()
{
    char str1[50= "aossuper8.tistory.com";
    char str2[50];
    char str3[50];
 
    memcpy(str2, str1, strlen(str1) + 1);
    memcpy(str3, "aossuper8"10);
 
    puts(str1);
    puts(str2);
    puts(str3);
    return 0;
}
cs

< 출력 >
aossuper8.tistory.com
aossuper8.tistory.com
aossuper8

memcpy 사용법은 memcpy(복사할 주소, 복사할 값, 복사할 길이)이다.
한마디로 말해 str1로부터 strlen(str1)+1 만큼 문자를 str2에 복사해라라는 말이다.
strcpy와 같지만 memcpy 함수를 사용하는 것도 나쁘지 않다.


memmove에 대해서 알아보자.

move라는 말을 봤을 때 옮기는 것으로 판단이 된다. 근데 이 함수는 옮긴다고 데이터가 사라지지는 않는다.


1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <string.h>
int main()
{
    char str[50= "aossuepr8.tistory.com";
 
    puts(str);
    puts("memmove 이후");
    memmove(str + 21, str + 174);
    puts(str);
    return 0;
}
cs

< 출력 >
aossuepr8.tistory.com
memmove 이후
aossuepr8.tistory.com.com

memmove 사용법은 memmove(옮길 위치, 복사할 위치, 몇 개의 문자를 복사?)라고 볼 수 있다.
한마디로 말해 str+17에서 4개의 문자를 str+21에 옮기겠다 말이다.
str 문자열은 aossuper8.tistory.com.com으로 만든 것이다.
memmove 함수의 장점은 memcpy와 하는 일이 많이 비슷해 보이지만 memcpy와는 달리 메모리 공간이 겹쳐도 된다.
나중에는 memcpy보다 memmove를 많이 사용하게 될 것이다.


memcmp에 대해서 알아보자. memcmp는 메모리 공간을 비교하는 함수이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <string.h>
int main()
{
    int arr1[10= { 1,2,3,4,5 };
    int arr2[10= { 1,2,3,4,5 };
 
    if (memcmp(arr1, arr2, 5== 0)
        puts("arr 과 arr2는 일치!");
    else
        puts("arr 과 arr2는 불일치!");
 
    return 0;
}
cs

< 출력 >
arr 과 arr2는 일치!

memcmp(비교할 값, 비교할 값, 데이터 개수)
memcmp는 꽤 유용하게 사용될 수 있다. 이 함수는 메모리의 두 부분을 원하는 만큼 비교를 한다.
같다면 0, 다르면 0이 아닌 값을 리턴하게 되어있다.


댓글

Designed by JB FACTORY