문자 - 작은따옴표(' ')

문자열 - 쌍따옴표(" ")


charactor

문자 하나. 


ex)

char ch = 'A';


char ch[] = {'A', 'B', 'C'};

 B

 C



char[]

문자열.


char str[] = "Hello, world!"; // 자동으로 길이 할당  

 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' };

 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

MACROANSIUNICODE
_tprintfprintfwprintf
_ftprintffprintffwprintf
_stprintfsprintswprintf
_sntprintf_snprintf_snwprintf
_vtprintfvprintfvwprintf
_vftprintfvfprintfvfwprintf
_vstprintfvsprintfvswprintf
_vsntprintf_vsnprintf_vsnwprintf
_tscanfscanfwscanf
_ftscanffscanffwscanf
_stscanfsscanfswscanf
 
2.      Formatted I/O
MACROANSIUNICODE
_fgettcfgetcfgetwc
_fgettsfgetsfgetwc
_fputtcfputcfputwc
_fputtsfputsfputws
_gettcgetcgetwc
_gettchargetchargetwchar
_gettsgets_getws
_puttcputcputwc
_puttcharputcharputwchar
_puttsputs_putws
_ungettcungetcungetwc
 
3.       Stdio function
MACROANSIUNICODE
_tfopen _wfopen
_tfreopen _wfreopen
 
4.       String conversion function
MACROANSIUNICODE
_tcstodstrtodwcstod
_tcstolstrtolwcstol
_tcstoulstrtoulwcstoul
_itot_itoa_itow
_ltot_ltoa_ltow
_ultot_ultoa_ultow
_ttoiatoi_wtoi
_ttolatol_wtol
 
5.       String function
MACROANSIUNICODE
_tcscatstrcatwcscat
_tcschrstrchrwcschr
_tcscmpstrcmpwcscmp
_tcscpystrcpywcscpy
_tcscspnstrcspnwcscspn
_tcslenstrlenwcslen
_tcsclenstrlenwcslen
_tcsncatstrncatwcsncat
_tcsnccatstrncatwcsncat
_tcsnccmpstrncmpwcsncmp
_tcsncmpstrncmpwcsncmp
_tcsncpystrncpywcsncpy
_tcsnccpystrncpywcsncpy
_tcspbrkstrpbrkwcspbrk
_tcsrchrstrrchrwcsrchr
_tcsspnstrspnwcsspn
_tcsstrstrstrwcsstr
_tcstokstrtokwcstok
_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
MACROANSIUNICODE
_istalphaisalphaiswalpha
_istupperisupperiswupper
_istlowerisloweriswlower
_istdigitisdigitiswdigit
_istxdigitisxdigitiswxdigit
_istspaceisspaceiswspace
_istpunctispunctiswpunct
_istalnumisalnumiswalnum
_istprintisprintiswprint
_istgraphisgraphiswgraph
_istcntrliscntrliswcntrl
_istasciiisasciiiswascii
_totuppertouppertowupper
_totlowertolowertowlower
 


Posted by HUEJI
: