MFC 문자열 총정리
Programming/MFC 2012. 6. 15. 19:58 |문자 - 작은따옴표(' ')
문자열 - 쌍따옴표(" ")
charactor
문자 하나.
ex)
char ch = 'A';
A |
char ch[] = {'A', 'B', 'C'};
A |
B |
C |
char[]
문자열.
char str[] = "Hello, world!"; // 자동으로 길이 할당
H |
e |
l |
l |
o |
, |
|
w |
o |
r |
l |
d |
! |
\n |
str[0] == 'H'
str[1] == 'e'
str[2] == 'l'
str[3] == 'l'
str[4] == 'o'
str[5] == ','
str[6] == ' '
str[7] == 'w'
str[8] == 'o'
str[9] == 'r'
str[10] == 'l'
str[11] == 'd'
str[12] == '!'
str[13] == '\n'
문자열의 들어가는 \n ( NULL 이나 '0' 으로도 표현 ) 은
문자열의 마지막을 나타내는 특수문자이다.
그래서 배열의 크기도 원래 글자 수보다 하나 많다.
char str[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!', '\n' };
H | e | l | l | o | , |
| w | o | r | l | d | ! | \n |
※ 참고로 이런 식으로 배열에 직접 문자를 넣어주는 선언을 할 때, \n가 char형 배열에 없다면
printf 등 문자열을 다루는 함수를 호출할 때 문자열이 아닌 문자로 받아들여 처참한 결과를 낳게 됨.
그런 경우, 그 배열은 이미 문자열이 아닌 단순한 '문자 배열' 이다.
char*
char* str = "Hello, World!";
배열에 한 글자 씩 할당되는 게 아니라, 메모리 공간에 문자열 자체 (Hello, World!\n) 를 저장한 후
해당 문자열의 첫 번째 문자의 주소를 반환하여 저장한다.
그래서인진 모르겠으나... 가리키는 주소는 얼마든지 변경할 수 있어도 문자열의 내용 자체는 변경할 수 없다.
CString
MFC에서 쓰이는 문자 표현 클래스. 더불어 내가 완전 사랑하는 놈
변환
※ 문자 집합
윈도우 프로그래밍에서는 문자집합 설정에 따라 문자의 표현 방법이 다르다.
비주얼 스튜디오의 프로젝트->(프로젝트명)속성의 구성속성->일반의 문자집합에서 설정할 수 있다.
설정을 안하는 경우는 안써봐서 잘 모르겠고.................
(자기가 원할 때 코드 안에서 문자 집합을 마음대로 변경할 수 있는지 없는지 알아봐야겠다.)
문자 집합은 멀티바이트와 유니코드로 나뉜다.
각각
"문자"(멀티바이트), L"문자"(유니코드)
와 같이 표현한다.
그리고 이러한 빡치는 문자 표현 방법으로 인해 뻘짓을 막기 위해 & 범용성(?)을 넓히기 위해
문자 집합을 유니코드로 설정했을 때 _UNICODE 가 선언되어
예) _T(x) 매크로
#indef _UNICODE
#define __T(x) L##x
#else
#define __T(x) x
#endif
이런식으로 매크로로 정의되어있고 설정따라 바뀌어가며 사용됩니다.
참고로 문자열 관련 변수, 예를 들어 LPCTSTR 는
유니코드일 땐 LPCWSTR, 멀티바이트일 때는 LPCTSTR 그대로 사용됩니다.... 아마 그럴겁니다-_-;;
저기서 W가 Wide char 라는 의미일거임.
아무튼 그런 의미로 MFC에서는 문자열을 _T("")로 표현하는 게 좋다.
문자->숫자
CString -> int
CString str = _T("34");
int i = _ttoi(str);
※ _ttoi(x)
string x를 int형으로 변경해줌.
( ANSI : atoi / UNICODE : _wtoi )
CString -> float
CString str = _T("23.583");
float f = _ttof(str);
※ _ttof(x)
string x를 float형으로 변경해줌
( ANSI : atof / UNICODE : _wtof )
숫자->문자
int -> CString
int i = 5;
CString str;
str.Format("%d", i);
int -> char* (+진법 변환)
char* _itoa(int value, char* str, int radix);
int value -> 변환을 하고자 하는 숫자
char* str -> 결과값 저장할 변수
int radix -> 진법 (2~36까지 된다고 하지만 2,8,10,16만 된다고도 하는데 확인은 안해봄)
문자->문자
CString -> LPWSTR
(unicode일 때.. 다른 건 안해봐서 잘 모르겠음)
LPWSTR pszText;
CString str = _T("test");
pszText = (LPWSTR)(LPCWSTR)str;
====== 나머지는 다음에
※ 유니코드 관련 함수 모음
퍼온건데 출처 명시가 안되어있음;;
1. Formatted I/O | ||
| MACRO | ANSI | UNICODE |
| _tprintf | printf | wprintf |
| _ftprintf | fprintf | fwprintf |
| _stprintf | sprint | swprintf |
| _sntprintf | _snprintf | _snwprintf |
| _vtprintf | vprintf | vwprintf |
| _vftprintf | vfprintf | vfwprintf |
| _vstprintf | vsprintf | vswprintf |
| _vsntprintf | _vsnprintf | _vsnwprintf |
| _tscanf | scanf | wscanf |
| _ftscanf | fscanf | fwscanf |
| _stscanf | sscanf | swscanf |
| 2. Formatted I/O | ||
| MACRO | ANSI | UNICODE |
| _fgettc | fgetc | fgetwc |
| _fgetts | fgets | fgetwc |
| _fputtc | fputc | fputwc |
| _fputts | fputs | fputws |
| _gettc | getc | getwc |
| _gettchar | getchar | getwchar |
| _getts | gets | _getws |
| _puttc | putc | putwc |
| _puttchar | putchar | putwchar |
| _putts | puts | _putws |
| _ungettc | ungetc | ungetwc |
| 3. Stdio function | ||
| MACRO | ANSI | UNICODE |
| _tfopen | _wfopen | |
| _tfreopen | _wfreopen | |
| 4. String conversion function | ||
| MACRO | ANSI | UNICODE |
| _tcstod | strtod | wcstod |
| _tcstol | strtol | wcstol |
| _tcstoul | strtoul | wcstoul |
| _itot | _itoa | _itow |
| _ltot | _ltoa | _ltow |
| _ultot | _ultoa | _ultow |
| _ttoi | atoi | _wtoi |
| _ttol | atol | _wtol |
| 5. String function | ||
| MACRO | ANSI | UNICODE |
| _tcscat | strcat | wcscat |
| _tcschr | strchr | wcschr |
| _tcscmp | strcmp | wcscmp |
| _tcscpy | strcpy | wcscpy |
| _tcscspn | strcspn | wcscspn |
| _tcslen | strlen | wcslen |
| _tcsclen | strlen | wcslen |
| _tcsncat | strncat | wcsncat |
| _tcsnccat | strncat | wcsncat |
| _tcsnccmp | strncmp | wcsncmp |
| _tcsncmp | strncmp | wcsncmp |
| _tcsncpy | strncpy | wcsncpy |
| _tcsnccpy | strncpy | wcsncpy |
| _tcspbrk | strpbrk | wcspbrk |
| _tcsrchr | strrchr | wcsrchr |
| _tcsspn | strspn | wcsspn |
| _tcsstr | strstr | wcsstr |
| _tcstok | strtok | wcstok |
| _tcsdup | _strdup | _wcsdup |
| _tcsicmp | _stricmp | _wcsicmp |
| _tcsncicmp | _strnicmp | _wcsnicmp |
| _tcsnicmp | _strnicmp | _wcsnicmp |
| _tcsnset | _strnset | _wcsnset |
| _tcsncset | _strnset | _wcsnset |
| _tcsrev | _strrev | _wcsrev |
| _tcsset | _strset | _wcsset |
| _tcslwr | _strlwr | _wcslwr |
| _tcsupr | _strupr | _wcsupr |
| 6. ctype function | ||
| MACRO | ANSI | UNICODE |
| _istalpha | isalpha | iswalpha |
| _istupper | isupper | iswupper |
| _istlower | islower | iswlower |
| _istdigit | isdigit | iswdigit |
| _istxdigit | isxdigit | iswxdigit |
| _istspace | isspace | iswspace |
| _istpunct | ispunct | iswpunct |
| _istalnum | isalnum | iswalnum |
| _istprint | isprint | iswprint |
| _istgraph | isgraph | iswgraph |
| _istcntrl | iscntrl | iswcntrl |
| _istascii | isascii | iswascii |
| _totupper | toupper | towupper |
| _totlower | tolower | towlower |
[출처] 유니코드 관련 함수들|작성자 백이
'Programming > MFC' 카테고리의 다른 글
| ::SetCurrentDirectory를 사용하면 다른 API 함수에 영향을 끼칠지도 모른다. (0) | 2012.08.07 |
|---|---|
| [MFC 종료]OnCancel(), OnClose(), OnDestroy(), OnOK() 그리고 Dialog 소멸자 (0) | 2012.06.27 |
| CString를 char*로 바꾸기 (0) | 2012.04.25 |
| 자식윈도우 Z-order 문제 (2) | 2012.03.30 |
| VISUAL C++ 2008 MFC 윈도우 프로그래밍 247p 3번 (0) | 2012.02.16 |

