문자 문자열

CJB_ny·2022년 7월 29일
0

C++ 정리

목록 보기
16/95
post-thumbnail
  • char : 알파벳 / 숫자 문자를 나타낸다.

  • wchar_t : 유니코드 문자를 나타낸다.

유니코드

국제화 시대에서는 이 아스키 코드 표로만 다 서비스 할 수 없다.

그래서 나온게 "유니코드"

유니코드 : 전 세계 모든 문자에 대해 유일 코드를 부여한 것.

유니코드의 표기방식

  1. UTf8
알파벳, 숫자 -> 1바이트로 표현 (ASCII 와 동일한  번호)
유럽지역 문자 -> 2바이트
한글, 한자 -> 3바이트로 표현
  1. UTF16

    알파벳, 숫자, 한글, 한자 -> 다 2바이트로 표현
    매우 예외적으로 고대문자 4바이트로 표현한다.(사실상 무시해도됨)

MS UTF16 사용 C#도 UTF16사용

wchar_t

그래서 이 UTF16을 저장하기 위한 타입으로

"wchar_t"가 있는 것이다.

wchar_t wch = L'안'; // UTF16이라는 것을 명시해주기 위하여 'L'을 붙임.

cout << wch << endl // 출력값은 50504 이다.

cout은 char전용이다.

또한 한국어를 인식을 못하기 때문에 그래서

wcout.Imbue(Local("kor"));
wcout << wch << endl;

Escape Squence

표기 하기 애매한 애들을 표현

  • \t : 아스키코드 9번 - Tab

  • \n : 아스키코드 10번 - LineFeed (한줄 아래로)

  • \r : 아스키코드 13번 - CarriageReturn (커서 <<)

  • \' : 백슬레쉬 뒤에 뭔가와 조합.

이런데 우리가 Enter를 키보드 입력을 받으면 한줄 아래로 내려가고 제일 왼쪽으로 커서가 이동하는데

이게 바로 "\n\r" 을 동시에 수행했다고 보면된다.

문자열 ❗

문자들이 열을 지어서 모여있는 것.

문자열의 끝에는 항상 00번이 존재한다 ❗

그래야 '끝'을 의미를 함. 0x00

지금은 str이 전역변수 선언되어있다.

"전역 변수"는 메모리의 "데이터"영역에 올라간다.

"데이터 영역"은 메모리가 0으로 초기화가 되어있기 때문에

정상적으로 hello가 나오는데

c 스타일 문자 사용할 때의 주의사항 ❗❗

이녀석을 스택 영역에 끌고 오면은

이런 뒤에 이상한 값들이 나온다.

우리가 'o'뒤에 끝나는 값인 '\0'을 넣어놓지 않았기 때문에

'\0'이라는 값을 만나기 전까지 메모리를 뒤지고 있는 것이기 때문이다.

그래서 스택어딘가의 값을 뒤지고 있기 때문이다.

이렇게 붙어주어야한다.

char str[] = { 'h', 'e', 'l', 'l', 'o', '\0' };

그래서 문자열을 이런식으로 계속 표현하면 귀찮으니까

char str2[] = "Hello";

이렇게 사용을 하는데 o뒤에 '\0'이 붙어있는 상태이다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글