[C++] char 타입

san-sae·2025년 7월 21일
0

[C++] 알고리즘

목록 보기
2/3

char 타입

  • char
    • char 타입은 하나의 글자를 저장하는 데이터 타입이다.
    • C++에서 ASCII문자(영어, 숫자, 기호)는 char 타입은 1byte(8비트)로 표현한다.
    • 한글이나 유니코드 문자의 경우 다중 바이트 인코딩이 필요하다.(1byte 이상 차지)

char[]

  • char형의 배열을 이용하여 문자열을 변수에 저장할 수 있다.
  • 배열의 끝에 \0(NULL 문자) 반드시 표시하여 문자열의 끝을 알린다.
    • 정수형 변수는 사용되는 메모리 크기가 4bytes로 항상 일정하다.

    • 그러나, 문자열은 사용되는 메모리의 크기가 일정하지 않다.

    • 저장되는 문자 개수에 따라 메모리가 달라지기 때문에 NULL 문자를 통해 끝을 알린다.

    • 따라서 배열의 크기가 문자열 + 1(NULL 문자)보다 작으면 버퍼 오버플로우가 발생할 수 있다.

    • 예. Hello를 문자열에 저장한다면, 각 한 글자당 배열 요소 하나를 차지한다. 그리고 마지막 글자 다음에는 \0가 할당되고 그 이후로는 쓰레기값이 들어간다.

      Hello\0쓰레기값...

문자열 할당 방법

  1. 선언과 동시에 초기화

    • 선언과 할당을 따로 분리 가능
    char a[6] = "Hello";
    cout << a; // Hello
    char a[6];
    a = "Hello";
    cout << a; // Hello
  2. strcpy() 사용

    • <cstring> 헤더 미리 정의해야 한다.
    • 만약 char 배열에 이미 값이 존재한 상태에서 strcpy() 사용할 경우, 기존 값을 덮어버린다.
    #include<cstring>
    
    char a[6];
    strcpy(a, "Hello");  
    cout << a; // Hello

    <cstring> vs <string>

    <string><cstring>
    사용 방식C++ 스타일(객체지향)C 스타일(함수 기반, 배열 사용)
    주요 타입std::stringchar, char*
    메모리 안정성높음(자동 관리)낮음(수동 관리) \rightarrow 오버플로우 위험 있음
    기타문자열 끝은 반드시 \0로 끝나야 함
  3. 수동으로 복사

    • 명시적으로 각 문자를 복사할 경우, 마지막에 \0도 복사해준다.
    char a[6];
    
    a[0] = 'H';
    a[1] = 'e';
    a[2] = 'l';
    a[3] = 'l';
    a[4] = '0';
    a[5] = '\0'; // 문자열의 끝
    cout << a; // Hello

참고 자료

0개의 댓글