본문 바로가기

C 언어 함수

동적 할당 시 값 초기화 memset 함수


memset 함수를 사용하면 배열이나 구조체 같은 데이터 구조의 초기화를 간단하고 빠르게 수행할 수 있습니다. 예를 들어, 정수 배열을 0으로 초기화하거나, 문자 배열에 특정 문자를 채울 때 유용하다. 

C 언어의 표준 라이브러리인 <string.h>에 정의되어 있다. 

void *memset(void *s, int c, size_t n);


s: 초기화할 메모리의 시작 주소
c: 메모리에 설정할 값 (int형으로 전달되지만, 실제로는 unsigned char로 변환되어 메모리에 저장됨

n: 초기화할 바이트 수

 

예제 1: 정수 배열 초기화

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

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


예제 2: 문자 배열 초기화

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

int main() {
    char buffer[50];
    memset(buffer, '-', sizeof(buffer));
    buffer[49] = '\0';  // 마지막에 널 문자 추가
    printf("Buffer: %s\n", buffer);
    return 0;
}

 

주의사항
타입 캐스팅: memset은 두 번째 인자를 unsigned char로 취급하여 메모리에 저장하기 때문에, 초기화하려는 데이터 타입의 크기에 따라 예상치 못한 결과를 초래할 수 있다. 특히, 멀티바이트 타입에서는 주의가 필요하다. 

'C 언어 함수' 카테고리의 다른 글

strtok를 연속 호출하면 인자에 NULL을 넣는다.  (1) 2024.04.28
strcpy와 strdup 차이  (1) 2024.04.28
sqrt 함수  (1) 2024.04.22
부분 문자열 비교 함수 strstr  (0) 2024.04.22
삼항 연산자 사용하기  (1) 2024.04.21