티스토리 뷰

운영체제

window 문자와 문자열

jazzmaster 2019. 6. 7. 02:22

 

 

 

1. 윈도우는 유니코드 문자를 UTF-16로 인코딩

: 각 문자를 2바이트(16비트)로 구성함.

: 몇몇 소수 언어들은 2바이트도 부족한 경우가 존재. 그래서 4바이트 인코딩 방법도 존재는 함

 

2. 유니코드 문자열 선언 

:wchar_t name = L'Ronaldo';

:wchar_t dataBuf[100] = L"Cristiano Ronaldo";      //99개의 16비트 문자와 16비트 문자열 종결 문자 0

: 윈도우를 개발한 팀에서 c언어의 자료형과 윈도우 자료형을 구분하기 위해 WinNT.h에 아래와 같이 정의해둠

typedef char      CHAR;     // 8비트 문자

typedef wchar_t    WCHAR      // 16비트 문자

 

: 또한 문자와 문자열을 가리키는 포인터 자료형에 대해서도 아래와 같이 정의함

// 8비트 문자열 포인터

typedef CHAR   * PCHAR;

typedef CHAR   * PSTR;

typedef CONST  CHAR * PCSTR

 

//16비트 문자열 포인터

typedef WCHAR * PWCHAR;

typedef WCHAR * PWSTR;

typedef CONST CHAR * PCWSTR;

 

 

 

 

3. c 스타일 문자열 함수들을 사용하지 말자.

:strcpy , wcscpy와 같은 함수들은 최대 크기를 인자로 받지 않는다.

: 그게 보안 취약점으로써 다양한 멜웨어 공격을 받았었다. 메모리에 문제가 생겨도 에러를 못보고, 

  메모리가 정상적으로 돌아가는지 알 길이 없었다.ㅣ

: _s 함수를 적극 이용하자.(나는 그동안 잘 안썻었는데, 이건 필수인거 같다)

 

 

4. 왜 유니코드를 사용해야 하나?

: 다른 나라의 언어로 애플리케이션을 지역화 하기 용이함

: 코드가 더 빠르게 수행되고 더 적은 메모리를 사용(윈도우는 내부적으로 유니코드로 구성된 문자, 문자열을 사용,

  ANSI 문자나 문자열을 전달하면 새롭게 메모리를 할당하고 변경해야 하기때문)

: 윈도우가 제공하는 모든 함수들을 쉽게 사용.

: 닷넷 프레임워크와 호환성이 좋음(닷넷은 유니코드만 사용)

 

 

5. 개발할 때 생각해야 하는 것

: 문자열은 char배열 , byte배열로 보지 말고, 문자의 배열로 생각해라

: 문자나 문자열을 나타낼 경우 중립 자료형을 사용해라(TCHAR/PTSTR)

: 바이트나 바이트를 가리키는 포인터 , 데이터 버퍼를 표현하기위해서는 BYTE, PBYTE를 사용해라

: 문자나 문자열 상수 값을 표현할 때는 TEXT, _T 매크로를 사용해라. 

: 산술적인 계산 부분을 수정해라. 가령 버퍼의 크기를 전달 할 때 바이트 단위가 아닌

 

 

 

 

 

 

'운영체제' 카테고리의 다른 글

메모리에 관한 이야기  (0) 2019.04.28
스레드 동기화 정리  (0) 2019.04.27
thread 정리  (0) 2019.04.22
커널 오브젝트 , 핸들  (0) 2019.04.21
프로세스 정리  (1) 2019.04.20
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함