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 |