-
[C/C++] memset 함수 기본 사용법 및 예제프로그래밍/C++ 2019. 8. 28. 01:36
사용 환경
· <cstring>
목적
· 메모리의 시작점부터 연속된 범위를 임의의 값으로 초기화 하고 싶은 경우 사용
-> (모든 값은 바이트 단위로 저장된다.)
기본 함수 구조
· memset( void * ptr, int value, size_t num );
· ptr : 채우고자 하는 메모리의 시작 주소
· value : 채우고자 하는 값
· num : 채우고자 하는 메모리의 크기
취약점
· memset 함수는 1바이트 단위로만 동작하기 때문에 0,-1 을 제외한 다른 숫자는
원하는 값이 안 나올 수 있습니다. 대표적으로 int 는 32비트로 4바이트가 됩니다.
· 여기에 1이란 값을 넣으면 1바이트 마다 0x01 이라는 값이 채워집니다. 그렇게
4바이트가 채워지면 0x( 01 01 01 01) 이 채워지면서 다른 값이 나옵니다.
· char 형과 같이 1바이트 크기의 자료형은 문제없습니다.
ex) 0 -> 0x(0000'0000) = 0
-1 -> 0x(1111'1111) = -1
1 -> 0x(0101'0101) = 16843009
코드
#include <iostream> using namespace std; int main() { int test1[20]; memset(test1, -1, sizeof(test1)); cout << test1[1] << '\n' ; // 출력 : -1 memset(test1, 65, sizeof(test1)); cout << test1[1] << '\n'; // 출력 : 1094795585 //char 는 크기가 1바이트 이므로 정상작동 char test2[10]; memset(test2, 65, sizeof(test2)); cout << test2[1] << '\n'; // 출력 : A return 0; }
'프로그래밍 > C++' 카테고리의 다른 글
[C++] Map 컨테이너 기본 사용법 및 예제 (0) 2020.05.08 [C++] vector<int> a(3) 와 vector<int> a[3] 의 차이는 ? (2) 2020.01.17 [C/C++] C++ STL Pair 기본 사용법 및 예제 (0) 2019.08.23 [C/C++] C++ STL Stack 기본 사용법 및 예제 (0) 2019.08.22 [C/C++] C ++ STL Queue 기본 사용법 및 예제 (0) 2019.08.21