오류 코드 E0144 ("const char *" 형식의 값을 사용하여 "char *" 형식의 엔터티를 초기화할 수 없습니다.)

2022. 6. 18. 12:00C++

포인터 복습하면서 배열이 포인터와 똑같이 동작한다는 예제를 따라하고 있었는데 이러한 오류가 발생했다.

 

우선 해결 방법은

1. 상수형으로 바꿔주기

 

 

2. 프로젝트 속성에서 준수모드를 아니요로 바꿔주기

 

이렇게 두가지가 있다.

 

왜 이런 오류가 발생하는지도 궁금해서 찾아봤는데

https://docs.microsoft.com/ko-kr/cpp/build/reference/zc-strictstrings-disable-string-literal-type-conversion?view=msvc-170 

 

/Zc:strictStrings(문자열 리터럴 형식 변환 사용 안 함)

자세한 정보: '/Zc:strictStrings'(문자열 리터럴 형식 변환 사용 안 함)

docs.microsoft.com

문자열 리터럴은 변경 불가능하고 문자열 리터럴 중 하나의 내용을 수정하려고 하면 런타임에 액세스 위반 오류가 발생합니다. 문자열 포인터를 const로 선언하여 문자열 리터럴을 사용하여 초기화하거나(후략)

 

문자열 리터럴, 그러니까 "Second String"처럼 큰 따옴표에 작성된 부분은 변경하려고 하면 런타임에 오류가 발생하니 이를 엄격하게 검사하여 컴파일 단계에서 오류를 발생시켰다는 것 같다. 따라서 오류를 방지하기 위해 변경이 불가능한 상수형으로 선언하면 문제가 해결되고(첫 번째 방법), 또는 아예 그 엄격한 검사를 꺼도(두 번째 방법) 문제가 해결되는 것 같다.

'C++' 카테고리의 다른 글

C6011 오류 'NULL 포인터를 역참조하고 있습니다'  (0) 2022.04.16