memcpy, memmove, memcmp 메모리 관련 함수
- 프로그래밍/C/C++
- 2018. 7. 8.
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 + 17, 4); 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이 아닌 값을 리턴하게 되어있다.