C언어 메모리 동적할당 메모리 관리함수

    2018-02-10 17:56:09 작성

    메모리 관리 함수는 string.h에 포함되어 있습니다.

    memcmp

    메모리 공간에 들어있는 자료를 주어진 크기만큼 비교하여 같은지 확인합니다.

    int memcmp(const void * ptr1, const void * ptr2, size_t num)

    ptr1과 ptr2의 처음부터 num길이 만큼을 비교합니다.

    • ptr1 > ptr2 이면 양수 반환
    • ptr1 == ptr2 이면 0 반환
    • ptr1 < ptr2 이면 음수 반환
    #include <stdio.h>
    #include <string.h>
    
    #define COMP(result) (result == 0) ? "같다" : "다르다"
    
    int main(void) {
    	char* str1 = "aaaaaa";
    	char* str2 = "aabbcc";
    	int result1, result2;
    
    	result1 = memcmp(str1, str2, 2);
    	result2 = memcmp(str1, str2, 4);
    	printf("str1과 str2의 앞에 2byte는 %s\n", COMP(result1));
    	printf("str1과 str2의 앞에 4byte는 %s\n", COMP(result2));
    	return 0;
    }



    memcpy

    메모리를 복사합니다.

    void * memcpy( void * dest, const void * src, size_t num)

    src의 공간에서 num 길이만큼 dest에 복사하여 dest의 주소값을 반환합니다.
    단순 이진데이터를 복사하는 것이므로 자료형과 무관하게 복사합니다.

    #include <stdio.h>
    #include <string.h>
    
    #define COMP(result) (result == 0) ? "같다" : "다르다"
    
    int main(void) {
    	char src[] = "123456789";
    	char dest[] = "abcdefghijklmnopqrstuvwxyz";
    
    	memcpy(dest, src, strlen(src)); // 문자열의 실제 길이만큼 복사
    	printf("%s\n", dest);
    	return 0;
    }


    반환값과 dest의 주소가 같기 때문에 반환 받을 필요는 없습니다.


    memset

    지정된 값으로 메모리공간을 체웁니다.

    void * memset(void * ptr, int value, size_t num)

    메모리를 value 값으로 num 크기만큼 채웁니다.
    이때 value는 unsigned char형으로 변환됩니다.

    #include <stdio.h>
    #include <string.h>
    
    int main(void) {
    	char str[] = "123456789";
    
    	memset(str, '*', strlen(str));
    	printf("%s\n", str);
    	return 0;
    }


    memset은 메모리공간을 초기화하거나 내용을 삭제할때 주로 사용합니다.