Archive2/C&C++

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

novs 2022. 2. 2. 16:24
반응형
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*을 사용하는 것이 바람직하다.

반응형