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 함수를 사용하여 초기화할 수 있습니다.