MBCS 기반의 문자열
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char str[] = "ABC한글";
int size = sizeof(str);
int len = strlen(str);
printf("배열크기: %d\n", size);
printf(" 문자열길이: %d\n", len);
return 0;
}
諛곗뿴?ш린: 8
臾몄옄?닿만?? 7
배열길이8
문자길이7
ABC(3)+한글(4)+NULL(1) = 8
ABC(3)+한글(4) = 7
'한글'의 단어 길이가 4로 인식되고 있다 MBCS의 문제점이다
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
char str[] = "한글입니다";
int i;
for (int i = 0; i < 5; ++i)
{
fputc(str[i], stdout);
}
fputs("\n", stdout);
for (int i = 0; i < 10; ++i)
{
fputc(str[i], stdout);
}
fputs("\n", stdout);
return 0;
}
실행결과
한글
한글입니다
문자열길이가 5이지만 fputc는 1바이트만 출력하므로 10번호출해야함
MBCS는 프로그래밍할때 주의할게 많다
WBCS 기반의 프로그래밍
char 대신 wchar_t
"ABC" 대신 L"ABC" 사용
strlen 대신 wcslen
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
wchar_t str[] = L"ABC";
int size = sizeof(str);
int len = wcslen(str);
printf("배열크기: %d \n", size);
printf("문자열크기: %d \n", len);
return 0;
}
배열크기: 8
문자열크기: 3
윈도우2000 이상 운영체제는 내부적으로도 유니코드로 처리한다
#include <stdio.h>
#include <string.h>
int main(int argc, char* argv[])
{
wchar_t str[] = L"ABC";
int size = sizeof(str);
int len = wcslen(str);
wprintf(L"Array Size: %d \n", size);
wprintf(L"String Length: %d \n", len);
return 0;
}
Array Size: 8
String Length: 3