C 언어 표준 문자열 관련 함수
ANSI, Wide Char 별 함수 이름 정리
- by Tapitolife
SBCS: 1글자의 크기가 1바이트인 문자세트입니다. 흔히 쓰는 ASCII 코드라고 보면 됩니다.
이 경우 한글을 포함한 로마자 외 다른 글자는 지원되지 않습니다. (도스를 생각하시면 되겠네요.)
DBCS: 1글자의 크기가 2바이트인 문자세트입니다. 유니코드를 이야기하지는 않습니다.
SBCS로 나타내기에는 너무 많은 글자들을 표현하는 방식으로
KS-X-1001과 같은 코드가 대표적입니다.
MBCS: 문자의 종류에 따라 1글자의 크기가 다른 문자세트입니다. SBCS + DBCS의 짬뽕인데요.
아마 컴퓨터 처음 배우셨을 때 들으셨을 내용. 한글은 2바이트, 영문자와 숫자는 1바이트……
이것이 MBCS입니다.
이 때 영문자와 숫자는 표준 ASCII 코드를 사용하는 SBCS모드이고,
한글이나 한자, 가나 등은 CP949를 사용하는 DBCS모드입니다.
이런 시스템을 사용하는 대표적인 운영체제가 Windows 95/98/98SE/Me가 되겠습니다.
아니면 메모장에서 txt파일이 이런 방식으로 저장되기도 하고요.
WBCS: 이것이 비로소 유니코드와 관련되어있다 보면 됩니다.
2바이트를 쓴다는 것은 DBCS와 같지만, 한글/한자뿐만 아니라 아예 처음부터 알파벳과 숫자까지
모두 2바이트 테이블에다 배열하는 것이 다른 점이죠.
그리고 컴파일러에게 어떤 문자세트를 지정하느냐에 따라 프로그램 내부적으로 문자열이
서로 다른 방식으로 처리됩니다. 이번 포스팅에서는 그 문자세트에 따라 달라지는
문자열 함수의 이름에 대해 정리해보고자 합니다.
그럼 함수를 보기에 앞서 자료형의 차이를 보겠습니다.
비교 |
TCHAR |
SBCS |
MBCS |
WBCS |
헤더파일 |
tchar.h |
- |
string.h |
wchar.h |
매크로 선언 |
- |
- |
_MBCS |
_UNICODE |
기본 문자형 |
_TCHAR |
char |
char |
wchar_t |
정수 문자형[*] |
_TINT |
int |
int |
wint_t |
부호 있는 문자형 |
_TSCHAR |
signed char |
signed char |
wchar_t |
부호 없는 문자형 |
_TUCHAR |
unsigned char |
unsigned char |
wchar_t |
_TXCHAR형 |
_TXCHAR |
char |
unsigned char |
wchar_t |
문자열 |
_T, _TEXT |
"문자열" |
L"문자열" |
정수 문자형[*]: fgetc와 같은 함수에서 문자 외에 예외 값인 -1 등을 표현하기 위한 자료형
아래 표는 문자세트에 따른 함수 이름의 미묘한 변화를 정리한 것입니다.
만일 자신이 만든 프로그램이 여러 기종의 하드웨어에서 실행될 것이라면
TCHAR형 이름을 쓰는 것이 바람직합니다.
TCHAR형 이름 |
SBCS |
MBCS |
WBCS |
_cgetts |
_cgets |
_cgets |
_cgetws |
_cgetts_s |
_cgets_s |
_cgets_s |
_cgetws_s |
_cputts |
_cputs |
_cputs |
_cputws |
_fgettc |
fgetc |
fgetc |
fgetwc |
_fgettchar |
_fgetchar |
_fgetchar |
_fgetwchar |
_fgetts |
fgets |
fgets |
fgetws |
_fputtc |
fputc |
fputc |
fputwc |
_fputtchar |
_fputchar |
_fputchar |
_fputwchar |
_fputts |
fputs |
fputs |
fputws |
_ftprintf |
fprintf |
fprintf |
fwprintf |
_ftprintf_s |
fprintf_s |
fprintf_s |
fwprintf_s |
_ftscanf |
fscanf |
fscanf |
fwscanf |
_ftscanf_s |
fscanf_s |
fscanf_s |
fwscanf_s |
_gettc |
getc |
getc |
getwc |
_gettch |
_getch |
_getch |
_getwch |
_gettchar |
getchar |
getchar |
getwchar |
_gettche |
_getche |
_getche |
_getwche |
_getts |
gets |
gets |
getws |
_getts_s |
gets_s |
gets_s |
getws_s |
_istalnum |
isalnum |
_ismbcalnum |
iswalnum |
_istalpha |
isalpha |
_ismbcalpha |
iswalpha |
_istascii |
isascii |
isascii |
iswascii |
_istcntrl |
iscntrl |
iscntrl |
iswcntrl |
_istdigit |
isdigit |
_ismbcdigit |
iswdigit |
_istgraph |
isgraph |
_ismbcgraph |
iswgraph |
_istlead |
항상 false 반환 |
_ismbblead |
항상 false 반환 |
_istleadbyte |
항상 false 반환 |
isleadbyte |
항상 false 반환 |
_istlegal |
항상 true 반환 |
_ismbclegal |
항상 true 반환 |
_istlower |
islower |
_ismbclower |
iswlower |
_istprint |
isprint |
_ismbcprint |
iswprint |
_istpunct |
ispunct |
_ismbcpunct |
iswpunct |
_istspace |
isspace |
_ismbcspace |
iswspace |
_istupper |
isupper |
ismbcupper |
iswupper |
_istxdigit |
isxdigit |
isxdigit |
iswxdigit |
_itot |
_itoa |
_itoa |
_itow |
_itot_s |
_itoa_s |
_itoa_s |
itow_s |
_ltot |
_ltoa |
_ltoa |
_ltow |
_ltot_s |
_ltoa_s |
_ltoa_s |
_ltow_s |
_puttc |
putc |
putc |
putwc |
_puttch |
_putch |
_putch |
_putwch |
_putchar |
putchar |
putchar |
putwchar |
_putts |
puts |
puts |
_putws |
_sctprintf |
_scprintf |
_scprintf |
_scwprintf |
_sntprintf |
_snprintf |
_snprintf |
_snwprintf |
_sntprintf_s |
_snprintf_s |
_snprintf_s |
_snwprintf_s |
_sntscanf |
_snscanf |
_snscanf |
_snwscanf |
_sntscanf_s |
_snscanf_s |
_snscanf_s |
_snwscanf_s |
_stprintf |
sprintf |
sprintf |
swprintf |
_stprintf_s |
sprint_s |
sprint_s |
swprintf_s |
_stscanf |
sscanf |
sscanf |
swscanf |
_stscanf_s |
sscanf_s |
sscanf_s |
swscanf_s |
_taccess |
_access |
_access |
_waccess |
_taccess_s |
_access_s |
_access_s |
_waccess_s |
_tasctime |
asctime |
asctime |
_wasctime |
_tasctime_s |
asctime_s |
asctime_s |
_wasctime_s |
_tccmp |
_mbsncmp |
||
_tccpy |
_mbccpy |
||
_tccpy_s |
strcpy_s |
_mbccpy_s |
wcscpy_s |
_tchdir |
_chdir |
_chdir |
_wchdir |
_tclen |
_mbclen |
||
_tchmod |
_chmod |
_chmod |
_wchmod |
_tcprintf |
_cprintf |
_cprintf |
_cwprintf |
_tcprintf_s |
_cprintf_s |
_cprintf_s |
_cwprintf_s |
_tcreat |
_creat |
_creat |
_wcreat |
_tcscanf |
_cscanf |
_cscanf |
_cwscanf |
_tcscanf_s |
_cscanf_s |
_cscanf_s |
_cwscanf_s |
_tcscat |
strcat |
_mbscat |
wcscat |
_tcscat_s |
strcat_s |
_mbscat_s |
wcscat_s |
_tcschr |
strchr |
_mbschr |
wcschr |
_tcsclen |
strlen |
_mbslen |
wcslen |
_tcsclen_s |
strlen_s |
_mbslen_s |
wcslen_s |
_tcscmp |
strcmp |
_mbscmp |
wcscmp |
_tcscoll |
strcoll |
_mbscoll |
wcscoll |
_tcscpy |
strcpy |
_mbscpy |
wcscpy |
_tcscpy_s |
strcpy_s |
_mbscpy_s |
wcscpy_s |
_tcscspn |
strcspn |
_mbscspn |
wcscpn |
_tcsdec |
_strdec |
_mbsdec |
_wcsdec |
_tcsdup |
_strdup |
_mbsdup |
_wcsdup |
_tcserror |
strerror |
_strerror |
_wcserror |
_tcserror_s |
strerror_s |
strerror_s |
_wcserror_s |
_tcsftime |
strftime |
strftime |
wcsftime |
_tcsicmp |
_stricmp |
_mbsicmp |
_wcsicmp |
_tcsicoll |
_stricoll |
_mbsicoll |
_wcsicoll |
_tcsinc |
_strinc |
_mbsinc |
_wcsinc |
_tcslen |
strlen |
strlen |
wcslen |
_tcslen_s |
strlen_s |
strlen_s |
wcslen_s |
_tcslwr |
_strlwr |
_mbslwr |
_wcslwr |
_tcslwr_s |
_strlwr_s |
_mbslwr_s |
_wcslwr_s |
_tcsnbcnt |
_strncnt |
_mbsnbcnt |
_wcsncnt |
_tcsncat |
strncat |
_mbsnbcat |
wcsncat |
_tcsncat_s |
strncat_s |
_mbsnbcat_s |
wcsncat_s |
_tcsnccat |
strncat |
_mbsncat |
wcsncat |
_tcsnccmp |
strncmp |
_mbsncmp |
wcsncmp |
_tcsnccmp_s |
strncmp_s |
_mbsncmp_s |
wcsncmp_s |
_tcsnccoll |
_strncoll |
_mbsncoll |
_wcsncoll |
_tcsncmp |
strncmp |
_mbsnbcmp |
wcsncmp |
_tcsnccnt |
_strncnt |
_mbsnccnt |
_wcsncnt |
_tcsnccpy |
strncpy |
_mbsncpy |
wcsncpy |
_tcsnccpy_s |
strncpy_s |
_mbsncpy_s |
wcsncpy_s |
_tcsncicmp |
_strnicmp |
_mbsnicmp |
_wcsnicmp |
_tcsncicoll |
_strnicoll |
_mbsnicoll |
_wcsnicoll |
_tcsncpy |
strncpy |
_mbsnbcpy |
wcsncpy |
_tcsncpy_s |
strncpy_s |
_mbsnbcpy_s |
wcsncpy_s |
_tcsncset |
_strnset |
_mbsnset |
_wcsnset |
_tcsnextc |
_strnextc |
_mbsnextc |
_wcsnextc |
_tcsnicmp |
_strnicmp |
_mbsnbicmp |
_wcsnicmp |
_tcsnicoll |
_strnicoll |
_mbsnbicoll |
_wcsnicoll |
_tcsninc |
_strninc |
_mbsninc |
_wcsninc |
_tcsnccnt |
_strncnt |
_mbsnccnt |
_wcsncnt |
_tcsnset |
_strnset |
_mbsnbset |
_wcsnset |
_tcspbrk |
strpbrk |
_mbspbrk |
wcspbrk |
_tcsspnp |
_strspnp |
_mbsspnp |
_wcsspnp |
_tcsrchr |
strrchr |
_mbsrchr |
wcsrchr |
_tcsrev |
_strrev |
_mbsrev |
_wcsrev |
_tcsset |
_strset |
_mbsset |
_wcsset |
_tcsspn |
strspn |
_mbsspn |
wcsspn |
_tcsstr |
strstr |
_mbsstr |
wcsstr |
_tcstod |
strtod |
strtod |
wcstod |
_tcstoi64 |
_strtoi64 |
_strtoi64 |
_wcstoi64 |
_tcstok |
strtok |
_mbstok |
wcstok |
_tcstok_s |
strtok_s |
_mbstok_s |
wcstok_s |
_tcstol |
strtol |
strtol |
wcstol |
_tcstoui64 |
_strtoui64 |
_strtoui64 |
_wcstoui64 |
_tcstoul |
strtoul |
strtoul |
wcstoul |
_tcsupr |
_strupr |
_mbsupr |
_wcsupr |
_tcsupr_s |
_strupr_s |
_mbsupr_s |
_wcsupr_s |
_tcsxfrm |
strxfrm |
strxfrm |
wcsxfrm |
_tctime |
ctime |
ctime |
_wctime |
_tctime_s |
ctime_s |
ctime_s |
_wctime_s |
_tctime32 |
_ctime32 |
_ctime32 |
_wctime32 |
_tctime32_s |
_ctime32_s |
_ctime32_s |
_wctime32_s |
_tctime64 |
_ctime64 |
_ctime64 |
_wctime64 |
_tctime64_s |
_ctime64_s |
_ctime64_s |
_wctime64_s |
_texecl |
_execl |
_execl |
_wexecl |
_texecle |
_execle |
_execle |
_wexecle |
_texeclp |
_execlp |
_execlp |
_wexeclp |
_texeclpe |
_execlpe |
_execlpe |
_wexeclpe |
_texecv |
_execv |
_execv |
_wexecv |
_texecve |
_execve |
_execve |
_wexecve |
_texecvp |
_execvp |
_execvp |
_wexecvp |
_texecvpe |
_execvpe |
_execvpe |
_wexecvpe |
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
_tfindfirst |
_findfirst |
_findfirst |
_wfindfirst |
_tfindnext |
_findnext |
_findnext |
_wfindnext |
_tfindnext32 |
_findnext32 |
_findnext32 |
_wfindnext32 |
_tfindnext64 |
_findnext64 |
_findnext64 |
_wfindnext64 |
_tfindnexti64 |
_findnexti64 |
_findnexti64 |
_wfindnexti64 |
_tfindnexti6432 |
_findnexti6432 |
_findnexti6432 |
_wfindnexti6432 |
_tfindnext32i64 |
_findnext32i64 |
_findnext32i64 |
_wfindnext32i64 |
_tfopen |
fopen |
fopen |
_wfopen |
_tfopen_s |
fopen_s |
fopen_s |
_wfopen_s |
_tfreopen |
freopen |
freopen |
_wfreopen |
_tfreopen_s |
freopen_s |
freopen_s |
_wfreopen_s |
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
_tfullpath |
_fullpath |
_fullpath |
_wfullpath |
_tgetcwd |
_getcwd |
_getcwd |
_wgetcwd |
_tgetdcwd |
_getdcwd |
_getdcwd |
_wgetdcwd |
_tgetenv |
getenv |
getenv |
_wgetenv |
_tgetenv_s |
getenv_s |
getenv_s |
_wgetenv_s |
_tmain |
main |
main |
wmain |
_tmakepath |
_makepath |
_makepath |
_wmakepath |
_tmakepath_s |
_makepath_s |
_makepath_s |
_wmakepath_s |
_tmkdir |
_mkdir |
_mkdir |
_wmkdir |
_tmktemp |
_mktemp |
_mktemp |
_wmktemp |
_tmktemp_s |
_mktemp_s |
_mktemp_s |
_wmktemp_s |
_topen |
_open |
_open |
_wopen |
_topen_s |
_open_s |
_open_s |
_wopen_s |
_totlower |
tolower |
_mbctolower |
towlower |
_totupper |
toupper |
_mbctoupper |
towupper |
_tperror |
perror |
perror |
_wperror |
_tpopen |
_popen |
_popen |
_wpopen |
_tprintf |
printf |
printf |
wprintf |
_tprintf_s |
printf_s |
printf_s |
wprintf_s |
_tputenv |
_putenv |
_putenv |
_wputenv |
_tputenv_s |
_putenv_s |
_putenv_s |
_wputenv_s |
_tremove |
remove |
remove |
_wremove |
_trename |
rename |
rename |
_wrename |
_trmdir |
_rmdir |
_rmdir |
_wrmdir |
_tsearchenv |
_searchenv |
_searchenv |
_wsearchenv |
_tsearchenv_s |
_searchenv_s |
_searchenv_s |
_wsearchenv_s |
_tscanf |
scanf |
scanf |
wscanf |
_tscanf_s |
scanf_s |
scanf_s |
wscanf_s |
_tsetlocale |
setlocale |
setlocale |
_wsetlocale |
_tsopen |
_sopen |
_sopen |
_wsopen |
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
_tspawnl |
_spawnl |
_spawnl |
_wspawnl |
_tspawnle |
_spawnle |
_spawnle |
_wspawnle |
_tspawnlp |
_spawnlp |
_spawnlp |
_wspawnlp |
_tspawnlpe |
_spawnlpe |
_spawnlpe |
_wspawnlpe |
_tspawnv |
_spawnv |
_spawnv |
_wspawnv |
_tspawnve |
_spawnve |
_spawnve |
_wspawnve |
_tspawnvp |
_spawnvp |
_spawnvp |
_wspawnvp |
_tspawnvpe |
_spawnvpe |
_spawnvpe |
_wspawnvpe |
_tsplitpath |
_splitpath |
_splitpath |
_wsplitpath |
_tstat |
_stat |
_stat |
_wstat |
_tstat32 |
_stat32 |
_stat32 |
_wstat32 |
_tstati32 |
_stati32 |
_stati32 |
_wstati32 |
_tstat64 |
_stat64 |
_stat64 |
_wstat64 |
_tstati64 |
_stati64 |
_stati64 |
_wstati64 |
_tstof |
atof |
atof |
_wtof |
_tstoi |
atoi |
atoi |
_wtoi |
_tstoi64 |
_atoi64 |
_atoi64 |
_wtoi64 |
_tstol |
atol |
atol |
_wtol |
_tstrdate |
_strdate |
_strdate |
_wstrdate |
_tstrdate_s |
_strdate_s |
_strdate_s |
_wstrdate_s |
_tstrtime |
_strtime |
_strtime |
_wstrtime |
_tstrtime_s |
_strtime_s |
_strtime_s |
_wstrtime_s |
_tsystem |
system |
system |
_wsystem |
_ttempnam |
_tempnam |
_tempnam |
_wtempnam |
_ttmpnam |
tmpnam |
tmpnam |
_wtmpnam |
_ttmpnam_s |
tmpnam_s |
tmpnam_s |
_wtmpnam_s |
_ttoi |
atoi |
atoi |
_wtoi |
_ttoi64 |
_atoi64 |
_atoi64 |
_wtoi64 |
_ttol |
atol |
atol |
_wtol |
_tunlink |
_unlink |
_unlink |
_wunlink |
_tutime |
_utime |
_utime |
_wutime |
_tutime32 |
_utime32 |
_utime32 |
_wutime32 |
_tutime64 |
_utime64 |
_utime64 |
_wutime64 |
_tWinMain |
WinMain |
WinMain |
wWinMain |
_ui64tot |
_ui64toa |
_ui64toa |
_ui64tow |
_ui64tot_s |
_ui64toa_s |
_ui64toa_s |
_ui64tow_s |
_ultot |
_ultoa |
_ultoa |
_ultow |
_ultot_s |
_ultoa_s |
_ultoa_s |
_ultow_s |
_ungettc |
ungetc |
ungetc |
ungetwc |
_ungettch |
_ungetch |
_ungetch |
_ungetwch |
_vftprintf |
vfprintf |
vfprintf |
vfwprintf |
_vftprintf_s |
vfprintf_s |
vfprintf_s |
vfwprintf_S |
_vsctprintf |
_vscprintf |
_vscprintf |
_vscwprintf |
_vsctprintf_s |
_vscprintf_s |
_vscprintf_s |
_vscwprintf_S |
_vsntprintf |
_vsnprintf |
_vsnprintf |
_vsnwprintf |
_vsntprintf_s |
_vsnprintf_s |
_vsnprintf_s |
_vsnwprintf_s |
_vstprintf |
vsprintf |
vsprintf |
vswprintf |
_vstprintf_s |
vsprintf_s |
vsprintf_s |
vswprintf_s |
_vtprintf |
vprintf |
vprintf |
vwprintf |
_vtprintf_s |
vprintf_s |
vprintf_s |
vwprintf_s |
여기서는 그냥 문자세트에 따른 이름의 변화 양상을 쭉 보겠습니다.
SBCS, MBCS를 지원하는 함수는 대체적으로 strlen, strcpy같은 평범한 이름들을 가지고 있고요,
WBCS를 지원하는 특별히 w자가 많이 들어 갑니다.
str이었던 것이 wcs로 바뀌는 경우와, w자가 하나 더 붙는 경우가 많죠.
그리고 특정 문자세트와 관계없이 쓰는 함수는 str대신에 tcs가 붙는 경우와
t자가 하나 더 붙는 경우가 많죠.
다음 포스팅에서 기능별로 함수를 정리해 보겠습니다.
Routine Mappings: http://msdn.microsoft.com/en-us/library/tsbaswba%28VS.80%29.aspx
'Programming Language > C&C++' 카테고리의 다른 글
소켓 통신 #2 - AF_INET 사용하기 (2) (0) | 2014.09.19 |
---|---|
소켓 통신 #2 - AF_INET 사용하기 (1) (0) | 2014.09.19 |
소켓 통신 #1 - 소켓 통신에 쓰이는 구조체 (2) | 2014.09.19 |
C++11에서 추가된 클래스 - thread (0) | 2014.04.17 |
코드 컨벤션 정리 – 낙타, 파스칼, 헝가리안 (0) | 2011.02.11 |