[42seoul] memset은 어떤 함수일까??

개발하는 곰댕이·2021년 4월 10일
0

42Seoul

목록 보기
14/45

include

#include <string.h>
void *memset(void *b, int c, size_t len);

인자

  • b
    초기화를 진행할 포인터로 void * 의 형태이기 때문에 string뿐 아니라 다양한 값이 들어올 수 있다.
  • c
    c로 초기화를 진행한다.
  • len
    b에서 부터 len byte만큼 초기화를 진행한다.

1. memset이란?

memset함수는 b에서부터 len byte 까지 c 로 초기화 시켜주는 함수이다.

memset도 bzero처럼 함수 내부에서 b를 unsigned char로 캐스팅 해준다. 그 이유는 unsigned char같은 경우에는 해당 변수 안의 모든 값이 부호비트패딩비트같이 어떠한 용도로 사용되는 값이 있지 않고 우리가 전달하고자 하는 값으로 모두 차 있다. 그렇기 때문에 mem함수나 str함수 같이 메모리영역에 직접적으로 하나씩 접근하는 녀석들은 unsigned char로 바꿔서 접근하면 좋다고 한다.

여기에서 문득 궁금한 점이 생긴다. int형 배열도 초기화가 될까??

물론 되지 않는다. 이유는 memset은 1바이트 단위로 접근하여 초기화 시키는 녀석이기 때문에 4byte의 크기를 갖고 있는 int형에게는 적합하지 않다.
한번 해 보도록 하자.


이렇게 2byte를 3으로 초기화 시키면 어떻게 될까??
결과는

한번 int안을 뜯어보자.

00000000 00000000 00000011 00000011 이렇게 채워져 있다.

3(00000011) 이 두번 채워져서 771이 나온 것이다. 이렇기 때문에 int형에는 사용이 불가능 하다. 하지만 -1이나 0처럼 모든 비트가 같다면 사용이 가능하다.

2. 사용 예제

3. 리턴 값

들어온 b의 주소를 그대로 돌려준다.

0개의 댓글