지우너

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] PART 1. 2장 본문

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] PART 1. 2장

지옹 2024. 11. 9. 11:23

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] PART 1. 2장 아스키코드 vs. 유니코드 

MBCS 방식은 영어는 1바이트, 한글은 2바이트로 출력하기 때문에 상당히 효율적이어 보인다.

하지만 아래와 같은 2가지 문제점이 있다.

 

MBCS의 문제점① "한글"의 실제 길이는 2이지만, 4로 인식되고 있음.

char str[] ="ABC한글";
int size = sizeof(str); // 배열의 크기: 8(ABC=3byte, 한글=4byte, NULL=1byte)
int len = strlen(str); // 문자열 길이: 7 NULL문자를 포함하지 않으므로 3+4=7

 

MBCS의 문제점② 프로그래밍하기 까다로움

문자열의 길이가 5인 "한글입니다"를 출력하기 위해서는

1byte를 출력하는 fputs 함수를 10번 호출해야 함

char str[] ="한글입니다";
int i;
for(i=0; i<5; ++i){
	fputc(str[i], stdout); //"한글"
}
fputc("\n", stdout);

for(i=0; i<10; ++i){
	fputc(str[i], stdout); //"한글입니다"
}
fputc("\n", stdout);

 

 

문자열 조작함수

  • strlen→wcslen
  • strcpy→wcscpy
  • strncpy→wcsncpy
  • strcat→wcscat
  • strncat→wcsncat
  • strcmp→wcscmp
  • strncmp→wcsncmp

문자열 입출력 함수

  • printf→wprintf
  • scanf→wscanf
  • fgets→fgetws
  • fputs→fputws

int main(int args, char* argv[]) → int wmain(int args, wchar_t* argv[])