살구월드

잠깐, 리눅스, C 언어, Java, Python 등
각종 예제 검색하기

C언어 memset 메모리 초기화 API


memset함수는 전달하는 메모리 공간을 인자로 전달한 특정 값으로 저장하여 일괄 초기화하는 함수입니다.
특정한 메모리 공간을 지정한 값으로 저장 및 채우며 우리가 프로그래밍하다 변수나 배열이 필요한데, 이런 상황에서 초기화도 필요하다면 이때 memset을 사용합니다.


초기화란 기존 값들을 의미없게 모두 지운다는 것

memset 함수 원형


memset 함수는 <string.h> 헤더 파일에 선언되어 있으며 원형은 아래와 같습니다.


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



 

memset 인자는?


memset 함수는 아래와 같은 세 개의 인자를 가집니다.

ptr: 초기화할 메모리 영역의 시작 주소를 가리키는 포인터입니다.
value: 설정할 값으로, 보통 0이나 1과 같은 값이 주로 사용됩니다.
num: 초기화할 바이트 수를 나타내며, 초기화하고자 하는 메모리 영역의 크기를 정확히 지정해야 합니다.



memset 언제 사용하나?


memset은 우리가 사용하고 있는 변수나 배열처럼 연속적인 공간이 있을 때, 이 공간을 같은 값으로 초기화할 때 사용합니다.
변수나 배열을 초기값으로 설정하거나, 동적으로 할당된 메모리를 초기화할 때 유용하게 활용됩니다.
또한, 데이터를 처리하기 전에 메모리 영역을 명시적으로 초기화해야 할 때 memset 함수를 사용할 수 있습니다.

모든 것들을 일괄적으로 처리해보자. 즉 한번에!

 

memset 배열 초기화 예제


다음은 memset 함수를 사용하여 배열을 초기화하는 예제입니다.

#include <stdio.h>
#include <string.h>

int main() {
    int buf[8];
    
    memset(buf, 0, sizeof(buf));
    
    for (int i = 0; i < 8; i++) printf("%d ", buf[8]);
    return 0;
}

 

 



위 예제를 실행하면 buf라는 int크기의 8개의 공간을 가진 배열이 선언됩니다.
그리고 이 8개의 int 값에 모두 0이라는 값으로 초기화하기 위해 memset을 사용하였습니다.
여기서 사용하는 키워드 중 sizeof는 오른쪽 인자에 전달되는 배열의 크기를 반환함으로써 즉, 위 예제에서는 (int 크기 4byte) * 8 = 32가 됩니다.
이 크기를  memset에 전달함으로써 총 32 byte 크기의 공간에 0이라는 값으로 초기화합니다.

그리고 결과는 이 배열의 모든 값을 출력합니다.


 

memset 3이라는 숫자로 배열 초기화 예제


다음은 memset 함수를 사용하여 배열을 특정 값으로 초기화하는 예제입니다.

#include <stdio.h>
#include <string.h>

int main() {
    char buf[8];
    
    memset(buf, 3, sizeof(buf));
    
    for (int i = 0; i < 8; i++) printf("%d ", buf[8]);
    return 0;
}



 

위 예제는 1byte 크기의 공간을 연속적으로 8개 가지는 buf라는 이름의 배열을 만들었습니다.
그리고 memset을 통해 각 1byte 공간에 3이라는 값으로 초기화하였습니다.
그리고 이 배열을 출력하면 우리가 예상하듯이 3이라는 값들이 모두 나오는 것을 알 수 있습니다.

 

memset 함수는 C 언어에서 일괄적인 메모리 공간을 초기화할 수 있도록 도와줍니다.
위의 예제를 참고하여 배열이나 구조체 등을 초기화할 때 memset 함수를 사용하여 초기화할 수 있습니다.

잠깐, 리눅스, C 언어, Java, Python 등
각종 예제 검색하기

공유하기

facebook twitter kakaoTalk kakaostory naver band