WSP05

LJM·2023년 7월 11일
0

컴퓨터지식

목록 보기
6/41

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
profile
게임개발자 백엔드개발자

0개의 댓글