char* 3

Visual Studio "const char *" 형식의 값을 사용하여 "char *" 형식의 엔터티를 초기화할 수 없습니다.

char* pText = "String"; 다음과 같은 코드를 써서 컴파일하니 이런 오류가 떴다. '초기화 중' : 'const char[7]에서 'char*'(으)로 변환할 수 없습니다. 이 에러가 뜨는 원인은 Visual Studio 2017부터 준수모드로 설정하면 const char* 에서 char*로의 암시적 형변환을 허용하지 않기 때문이다(준수모드는 2번째 방법에서 바꾸는 방법을 소개). 해결 방법은 2가지가 있다. 1번째는 char*를 const char*로 바꾸면 된다. const char* pText = "String"; 2번째 방법은 Visual studio 설정을 바꿀 수 있는 상황에서 사용할 수 있다. 프로젝트 우클릭 > 속성 > C/C++ > 언어 > 준수 모드를 아니요로 바꾸면 c..

공부/그 외 2021.07.16

char*를 cout으로 출력할 경우 주소가 올바르게 나오지 않는 경우

reinterpret_cast를 이용해서 int*를 char*로 cast해서 주솟값을 std::cout을 이용해서 확인해보니 주솟값이 출력이 안되는 경우가 있었다. 처음엔 reinterpret_cast에 대해서 내가 잘 모르는게 있는줄 알고 열심히 찾아봤는데 그게 아니고 헤더 중에서도 출력과 관련 있는 에 대해 내가 모르는게 있었다. C++에서 을 이용해서 아래 코드처럼 char*의 주솟값을 출력하려고 하면 아무것도 출력되지 않는다. int memory[10]{ 1,2,3,4,5,6,7,8,9,10 }; int main() { int* p = memory; char* c = reinterpret_cast(p); cout

공부/C || C++ 2021.07.09

C 헷갈리는 char*와 char[] 그리고 string <-> char* 변환 방법

C++을 쓰면서는 string만 쓰겠지 생각하지만 은근히 char*나 char 배열을 쓰는 경우가 많다(나만 그런가). 쓰다보면 저 두개의 차이점을 잘 모르겠는데 이번 기회에 공부해서 정리해보려고 한다. 그리고 string char* 변환도 은근 자주 써야하는데 이거도 같이 정리해보자. 먼저 char*와 char array는 사이즈가 다르다 char*는 당연히 포인터니까 4byte이고, char array는 할당한 크기에 따라 달라질 것이다. 또 다른점은 char array는 인덱싱으로 해당 인덱스의 문자만 변경하는게 가능하다. int main() { char str[10] = "Hello"; str[3] = 'r'; } 하지만 char*는 똑같이 선언해도 .rodata section에 들어가는 녀석이라..

공부/C || C++ 2021.07.05