[C] E0144 "const char *" 형식의 값을 사용하여 "char" 형식의 엔터티를 초기화할 수 없습니다
Language/C, C++

[C] E0144 "const char *" 형식의 값을 사용하여 "char" 형식의 엔터티를 초기화할 수 없습니다

E0144 에러

 

 문자열 리터럴을 사용하기 위해서 char 형태의 변수를 선언했을 때 E0144 에러가 발생한다.

에러의 내용은 "홀수"라는 문자열은 const(상수)값인데 변수에 그 값을 집어넣으려고 하니 에러가 발생한다는 것이다.

 

 

 위 에러의 발생 원인을 MSDN에서는 다음과 같이 설명한다.

"C에서는 문자열 리터럴이 char의 배열이지만, C++에서는 const char의 배열이다."

 

 

 

 즉, char(혹은 char *)에 문자열 리터럴을 담는 방식은 C 방식이며,

C++ 에서는 잘못된 코딩방법이기 때문에 위와 같은 오류가 발생하는 것이다.

 

 

해결방법

 

1. pointer가 아닌 array 형식으로 선언

1 char s1[] = "aa"; cs



2. (char *) 형식으로 형변환(casting)

1 char *s1 = (char*)"aa"; cs



3. 자료형을 const char* 형태로 사용

1 const char *s1 = "aa"; cs

 

4. const_cast<char*> 사용

1 char *s1 = const_cast<char*>("aa"); cs

 

 

 

 

※ Dev C++의 경우 5.11버전 기준으로 warning을 생성하지만 에러로 취급하지 않아 컴파일이 가능하다.

 

 개인적으로 C와 C++ 차이를 정확히 이해하지 못하고 C언어의 범주 안에 C++이 포함되어 있다는

두루뭉술한 전제로만 인식한 채로 접근하고 있었던 와중에 이러한 에러를 만나서

C와 C++의 차이를 조금이나마 스스로 이해할 수 있었다.