[C++] 문자열 기호적 상수 (char[] vs char* vs const char*)

    반응형
    char str[] = "novlog" // 문자열 상수
    char *str = "novlog" // 불가능 error
    const char *str = "novlog" // 가능

    C++에서 문자열을 초기화 하는 방식은 여러가지가 존재한다. 

    char str[] = "novlog";

    우선 char str[] = "novlog" 와 같이 문자열 리터럴 상수로 배열을 초기화 가능하다.

    char *str = "novlog" //x

    char *str = "novlog" 처럼은 문자열을 초기화 할 수 없다. 그 이유는 어찌보면 당연한데, str이 포인터 이기 때문이다.

    "novlog"는 주소가 아닌 "문자열 리터럴" 이기에, 포인터로 주소가 아닌 리터럴을 가리킬 수 없는 것이다.

    const char* str = "novlog"

    단, const 키워드를 붙이면 가능하다. C++은 const 키워드를 붙이면 char* 또한 "특별히" 문자열로 초기화 가능하게 해준다. 하지만 상수이기에 char str[] 와 달리 문자열의 값을 변경하는 것은 불가능하다.

     

    따라서, 문자열의 값을 변경해야 한다면 char형 배열을 문자열 값을 변경할 필요가 없다면 const char*을 사용하는 것이 바람직하다.

    반응형

    댓글

    Designed by JB FACTORY