오류 코드 E0144 ("const char *" 형식의 값을 사용하여 "char *" 형식의 엔터티를 초기화할 수 없습니다.)
2022. 6. 18. 12:00ㆍC++
포인터 복습하면서 배열이 포인터와 똑같이 동작한다는 예제를 따라하고 있었는데 이러한 오류가 발생했다.
우선 해결 방법은
1. 상수형으로 바꿔주기
2. 프로젝트 속성에서 준수모드를 아니요로 바꿔주기
이렇게 두가지가 있다.
왜 이런 오류가 발생하는지도 궁금해서 찾아봤는데
/Zc:strictStrings(문자열 리터럴 형식 변환 사용 안 함)
자세한 정보: '/Zc:strictStrings'(문자열 리터럴 형식 변환 사용 안 함)
docs.microsoft.com
문자열 리터럴은 변경 불가능하고 문자열 리터럴 중 하나의 내용을 수정하려고 하면 런타임에 액세스 위반 오류가 발생합니다. 문자열 포인터를 const로 선언하여 문자열 리터럴을 사용하여 초기화하거나(후략)
문자열 리터럴, 그러니까 "Second String"처럼 큰 따옴표에 작성된 부분은 변경하려고 하면 런타임에 오류가 발생하니 이를 엄격하게 검사하여 컴파일 단계에서 오류를 발생시켰다는 것 같다. 따라서 오류를 방지하기 위해 변경이 불가능한 상수형으로 선언하면 문제가 해결되고(첫 번째 방법), 또는 아예 그 엄격한 검사를 꺼도(두 번째 방법) 문제가 해결되는 것 같다.
'C++' 카테고리의 다른 글
C6011 오류 'NULL 포인터를 역참조하고 있습니다' (0) | 2022.04.16 |
---|