C++ - 안전한 문자열 조작 함수
문자열 복사
strcpy_s, strcpy, _tcscpy_s, wcscpy, wcscpy_s
대체 추천 함수
strncpy_s(char), _tcsncpy_s(TCHAR) , wcsncpy_s(wchar_t)
errno_t wcsncpy_s( wchar_t *strDest, strDest의 크기, const wchar_t *strSource, 복사할 문자 수 );
wchar_t szDest[256] = {0,};
wchar_t szSource[] = L"TEST";
wcsncpy_s( szDest, 256, szSource, 4 );
// or
// 널문자를 위해. szSource의 널문자까지만 복사. 255문자를 복사하는 것이 아님
wcsncpy_s( szDest, 256, szSource, 256-1 );
- 참고 [[http://gpgstudy.com/forum/viewtopic.php?p=97501]]
형식화된 문자열 만들기
printf_s, _tprintf_s, wprintf_s, sprintf_s, sprintf, _stprintf_s, swprintf_s, _swprintf_s_l
대체 추천 함수
_snprintf_s(char), _sntprintf_s(TCHAR), _snwprintf_s(wchar_t)
문자열 합치기
strcat_s, strcat, _tcscat_s, wcscat_s
대체 추천 함수
strncat_s(char), _tcsncat_s (TCHAR), wcsncat_s(wchar_t)
문자열 비교
strcmp, _tcscmp, wcscmp
대체 추천 함수
strncmp(char), _tcsnccmp(TCHAR) , wcsncmp(wchar_t)
문자열 길이 구하기
strlen, strlen_s, _tcsnlen, wcsnlen
대체 추천 함수
strnlen_s(char), _tcsnlen(TCHAR) , wcsnlen_s(wchar_t)
가변 길이 문자열 만들기
vsprintf_s
대체 추천 함수
_vsnprintf(char) , _vsntprintf TCHAR), _vsnwprintf(wchar_t)
StringCchCopy와 StringCbCopy
- StringCchCopy 두 번째 인수: 버퍼의 크기. 문자 단위
- StringCbCopy 두 번째 인수: 버퍼의 크기. 바이트 길이
- http://msdn.microsoft.com/en-us/library/windows/desktop/ms647527(v=vs.85).aspx
- 이미 위에 대체 함수가 있으므로 비추
MultiByteToWideChar 사용 예
#include <windows.h>
int main()
{
char str[100] = "삼국지";
int npwstrLen = strlen(str) + 1;
// n1은 4, 널문자 포함 하지 않음
wchar_t* pwstr1 = new wchar_t[npwstrLen];
int n1 = MultiByteToWideChar(CP_ACP, 0, str, 8, pwstr1, npwstrLen);
// n2는 5, 널문자 포함. 네 번째 인수를 -1 을 해야 널문자가 들어감
wchar_t* pwstr2 = new wchar_t[npwstrLen];
int n2 = MultiByteToWideChar(CP_ACP, 0, str, -1, pwstr2, npwstrLen);
// n3는 4, 복사는 "삼국지" 까지 널문자 포함 하지 않음
wchar_t* pwstr3 = new wchar_t[npwstrLen];
int n3 = MultiByteToWideChar(CP_ACP, 0, str, 7, pwstr3, npwstrLen);
delete[] pwstr1;
delete[] pwstr2;
delete[] pwstr3;
return 0;
}
이 글은 2019-02-03에 작성되었습니다.