공부/C

C - memset

티르 2020. 12. 24. 16:39

memset  (memory + setting)


기능

  • 할당 받은 메모리를 특정 값으로 초기화 하는 함수
  • 주로 연속된 메모리(ex 배열)의 값을 초기화할 때 주로 사용

 

함수

#include <string.h> // or #include <memory.h>

void *memset(void *_Dst, int _Val, size_t _Size);

 

  • string.h와 memory.h 둘다 memset이 존재
  • _Dst : 포인터. 채우고자 하는 메모리의 시작 주소
  • _Val : 설정할 값
  • _Size : 설정할 바이트 수. 주로 sizeof(데이터타입)형태로 작성

 

반환값

  • 성공:  _Dst. 설정한 메모리의 시작주소
  • 실패: NULL

 

사용 예제

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

int main() {
	char ptr[] = "memset test";

	printf("before:\t%s\n", &ptr);
	memset(ptr, 'T', 4 * sizeof(char));
	printf("after:\t%s\n", &ptr);
    
    	return 0;
}

 

  • 결과: ptr배열의 0~3의 값이 'T'로 초기화 된다.

 

주의사항

  • _Val은 int형이지만 내부에서 unsinged char로 변환되어 저장
    • 1바이트 단위로 값을 초기화
    • int형이 아닌  char형 ‘a’를 넣을 수 있음
    • 0이 아닌 int형 변수가 들어가면 쓰레기값으로 세팅됨 -> int형은 4바이트로 표현되기 때문.

예제

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

int main() {
	int ptr[] = { 1, 2, 3, 4, 5, 6 };

	// _Val을 0으로
	memset(ptr, 0, 2 * sizeof(int));
	
	for (int i = 0; i<sizeof(ptr)/sizeof(int); i++)
	{
		printf("[%d] %d\n", i, ptr[i]);
	}

	printf("-----\n");

	// _Val을 1로
	memset(ptr, 1, 2 * sizeof(int));

	for (int i = 0; i < sizeof(ptr) / sizeof(int); i++)
	{
		printf("[%d] %d\n", i, ptr[i]);
	}
    
    	return 0;
}
  • 결과
    • _Val을 1로 한 경우, 쓰레기값으로 설정 됨.
    • _Val은 0또는 char형 타입만 사용해야한다.

'공부 > C' 카테고리의 다른 글

C - memcpy  (0) 2020.12.24
C - bzero  (0) 2020.12.24