728x90
알고리즘 문제를 풀다보면, 새로운 값을 입력받을 때마다,
임시적으로 사용했던 데이터들을 모두 갈아 엎고,
메모리에 저장된 값을 특정한 값으로 일괄초기화를 해야 하는 경우가 생기는데,
그럴 때마다 골치가 아팠는데 이럴 때 사용하기 좋은 메모리 조작 함수가 있다.
memset, memcmp, memcpy, memmove는 string.h에 정의되어 있으며,
memory.h에도 정의되어 있는데 이 때 memmove는 정의되어 있지 않으니,
고민할 것 없이 string.h를 포함시키면 된다.
1. memset
함수 원형
1 | void * memset(void * ptr, int value, size_t num); | cs |
사용법
memset(메모리 블럭 첫번째 주소, 문자(문자 하나), 메모리 블럭 크기(byte))
활용
자료형이 int인 2차원 배열 cac을 모두 -1로 초기화하려고 할 때,
1 2 | int cac[101][101]; memset(cac, -1, sizeof(cac)); | cs |
2. memcmp
- memcmp의 경우 strcmp와 다른 점은 비교하는 범위를 설정할 수 있다는 것이다.
strcmp는 문자열을 통째로 비교하고, memcmp는 비교할 범위를 지정할 수 있다.
함수 원형
1 | int memcmp ( const void * ptr1, const void * ptr2, size_t num ); | cs |
사용법
memcmp(비교할 첫번째 주소, 비교할 두번째 주소, 메모리 크기(byte))
활용
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> #include <string.h> int main () { char buffer1[] = "DWgaOtP12df0"; char buffer2[] = "DWGAOTP12DF0"; int n; n=memcmp ( buffer1, buffer2, sizeof(buffer1) ); if (n>0) printf ("'%s' is greater than '%s'.\n",buffer1,buffer2); else if (n<0) printf ("'%s' is less than '%s'.\n",buffer1,buffer2); else printf ("'%s' is the same as '%s'.\n",buffer1,buffer2); return 0; } | cs |
728x90
'Programming Language > C,C++' 카테고리의 다른 글
C++] 추상 클래스 (0) | 2017.06.26 |
---|---|
C++] 참조에 의한 호출로 객체 전달 (0) | 2017.06.21 |
C++] 다중상속(Multiple Inheritance) (0) | 2017.06.03 |
C++] RTTI(Run-Time Type Information) (0) | 2017.06.02 |
C,C++] 비트 연산 매크로 (0) | 2017.06.01 |