티스토리 뷰
안전한 문자열 함수
- StringCbCopy : 버퍼의 크기 ( 버퍼가 몇 바이트의 크기인가 )
HRESULT StringCbCopy ( OUT LPTSTR pszDest, // 복사 결과를 저장할 버퍼 IN size_t cbDest, (sizeof(TCHAR)) // 복사 결과를 저장할 버퍼의 크기 => pszDest의 크기 IN LPCTSTR pszSrc // 복사 원본 (NULL 포함된 문자열) )
- StringCchCopy : 버퍼의 길이 ( 버퍼가 문자열 몇 개를 담는가 )
HRESULT StringCchCopy ( OUT LPTSTR pszDest, // 복사 결과를 저장할 버퍼 IN size_t cchDest, (STRSAFE_MAX_CCH) // 복사 결과를 저장할 버퍼의 크기 => 저장할 글자 수 IN LPCTSTR pszSrc // 복사 원본 (NULL 포함된 문자열) )
- 반환값(HRESULT) : 함수의 성공여부, 성공한 경우 S_OK
특징
strsafe.h 헤더에 위와 같은 함수가 포함되어 있으므로 이 함수들을 사용하기 위해서는 strsafe.h 헤더파일을 포함시켜야한다.
사용 이유
기존에는 strcpy같은 함수를 사용했지만 그러면 아래의 예제를 통해 어떤 문제가 발생하는지 보겠다.
TCHAR* temp = "string copy" TCHAR buf[3]; _tcscpy(buf, temp);
위와 같은 경우, buf보다 큰 size인 temp를 복사할 경우, buf에 할당된 영역을 넘게되므로 버퍼 오버플로우 현상이 일어날 수 있다.
이러한 문제를 예방하기 위해 안전한 문자열 함수를 사용해야한다.
예제
- StringCbCopy
TCHAR tszTemp[256] = { 0x00, }; TCHAR *src = "Hello World"; StringCbCopy(tszTemp, sizeof(tszTemp), src)))
- StringCchCopy
TCHAR tszTemp[256] = { 0x00, }; TCHAR *src = "Hello World"; StringCchCopy(tszTemp, RTL_NUMBER_OF(tszTemp), src);
- RTL_NUMBER_OF(A) = sizeof(A)/sizeof((A)[0])) // return the number of elements in statically sized array.
'programming language > c++' 카테고리의 다른 글
[c++] struct와 class의 차이 (0) | 2018.06.14 |
---|---|
[c++] freind 함수 (0) | 2018.06.12 |
[c++] malloc/free, new/delete (0) | 2018.06.11 |
[C++] MultiByteToWideChar, WideCharToMultiByte 함수 (0) | 2018.06.07 |
[c++] 참조(reference) (0) | 2018.06.01 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- OS
- Android
- 운영체제
- layout
- debug
- 퀵정렬
- RelativeLayout
- 스프링부트
- 알고리즘
- ConstraintLayout
- 백준알고리즘
- LinearLayout
- C++
- adapter
- 백준
- frameLayout
- 윈도우
- C
- windows
- DATABASE
- BOJ
- 스프링
- 네트워크
- listview
- 이진탐색트리
- 정렬 알고리즘
- WinDbg
- 안드로이드
- handshake
- HTTP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함