개요
memset은 1byte 단위로 해당 메모리 값을 초기화 시킨다
memset(포인터, 설정할 값, 크기)
: void *memset(void *_Dst, int _Val, size_t _Size);
: 끝나고 값 설정이 끝난 포인터를 반환한다.
memset으로 int나 long 값을 10진수로 설정해줄땐 -1과 0밖에 설정하지 못한다.
물론 다른값을 설정할수도 있지만 그러면 원하는대로 안 들어간다.
이렇게만 가능!
int num;
memset(&num,-1, sizeof(num));
memset(&num, 0, sizeof(num));
왜냐하면 memset은 1바이트 단위로 값을 넣기 때문이다.
0으로 초기화하는 경우를 보자.
1byte는 2진수로 00000000이다. 이걸 int크기인 4바이트로 늘리면 00000000 00000000 00000000 00000000이 된다. 어차피 0밖에 없다. 4바이트로 늘려도 0이다.
-1로 초기화하는 경우도 마찬가지다.
-1을 1byte로 표현하면 11111111이다. 이것을 4바이트로 늘리면? 11111111 11111111 11111111 11111111. 어차피 -1이다.
하지만 1은? 1byte 00000001을 int형인 4byte로 늘리면? 00000001 00000001 00000001 00000001 이런식으로 될 것이다. 그리고 이 값은 더이상 1이 아니다!
아래 사진처럼 이상한 값이 들어간다.
의문
그러면 만약 bool로 설정하면 어떨까?
bool isPrime[10];
memset(isPrime, false, sizeof(isPrime));
memset(isPrime, true, sizeof(isPrime));
false는 물론 괜찮을것이다. 왜냐하면 false는 0이기때문에 위 예시에서 int를 0으로 초기화하는 것과 같은 결과가 나온다.
true는? 1로 초기화한다.
그런데 bool은 1byte 크기기 때문에 00000001이 더 늘어나지 않는다. 그냥 그대로 true가 저장되기때문에 괜찮다.
'Study > C,C++' 카테고리의 다른 글
C++ 반복문을 이용해서 코드 줄이기 (0) | 2020.09.11 |
---|---|
priority_queue에 struct를 넣을 때는 연산자 오버로딩이 필요하다 (0) | 2020.07.09 |
C++ filesystem:: C++에서 파일디렉토리/파일 시스템 읽어오기 (0) | 2019.10.18 |
헤더파일에 using namespace를 하지 말아야 하는 이유 (0) | 2019.10.18 |
[Error]undefined reference to ~ 해결법 (0) | 2019.10.07 |