inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

TextRPG #3

void PrintMessage(const char* msg) 함수가 헷갈립니다..

559

박준영

작성한 질문수 23

0

cout << "**************************" << endl;

cout << msg << endl;

cout << "**************************" << endl;

msg는 "로비에 입장했습니다." 문자열의 주소를 가지고 있는거니까 문자열을 출력하려면 cout << *msg << endl;로 해야 맞는게 아닌가요...?? msg가 가지고 있는 주소값에 접근한 값을 출력하는거니까...? 이해했다고 생각했는데 바로 헷갈려버리네요ㅠㅠ

C++

답변 2

0

Rookiss

1.
네 문자열의 주소값이 맞습니다.


위처럼 영어로 테스트 하면,
정상적으로 각 1 바이트 = 1 영어 문자이기 때문에
H e l l o W o r l d가 있는 것을 확인할 수 있습니다.
테스트하실 때 메모리 쪽에서 ???? 로 뜨는 것은 한국어라서 그렇게 뜨는겁니다.
영어는 아스키 코드 (1바이트)로 모든 문자를 표현할 수 있지만
한국어, 중국어, 일본어 등의 언어는 1바이트로는 모든 문자를 표현할 수 없기에
utf8 등 다양한 유니코드로 문자를 저장하는데
그럴 경우 1 바이트 = 1문자 라는 공식이 성립하지 않기 때문에
저렇게 물음표로 뜨는 것입니다.

2.
위와 같이 강제로 정수로 만들어서 출력하면 실제 주소값이 출력됩니다.

0

박준영

아 넵 완벽하게 이해했습니다! 감사합니다~~~

0

Rookiss

operator << 는 온갖 타입 별로 동작하게 재정의(overloading)이 되어 있어서,
char*를 전달하면 찰떡같이 알아듣고 문자열을 출력해주게 됩니다.

0

박준영

아직 이해가 잘 가지 않아서 질문 두가지만 하겠습니다ㅠㅠ

1. 제가 이해하기로는 msg는 *가 붙어있으니까 주소값을 저장하는 포인터고, 디스어셈블리에 msg를 입력해보니 f1baceb7이라는 값이 나오는데 "f1baceb7"가 "로비에 입장했습니다" 문자열의 주소값이 되는건가요? 아니면 "로비에 입장했습니다."가 유니코드로 저장되어있는건가요...? 저는 문자열의 주소값이 저장된다고 이해해서 0x71baceb7 주소에 "로비에 입장했습니다"가 저장되있을거라고 예상했는데 ????????가 저장되어있더라구요..ㅠㅠ

2. 그리고 << 연산자에 char*를 넘겨주면 찰떡같이 알아듣고 문자열을 출력해준다고 하셨는데, 그럼 찰떡같이 알아듣지 말고 그냥 주소값을 출력해달라고 하고싶으면 뭘 넣어야하는건가요...?

visualstudio에서 파일분할관리실습시 설정 문의를 드립니다.

0

560

1

정렬함수 좀 더 확실하게 이해 할 방법이 있을까요?

0

453

1

strcpy() 구현 관련 질문

0

536

1

빌드(망치)를 누르니 이런 오류가 떴습니다. 어떻게 해야 하나요?

0

475

1

클래스 타입의 포인터 질문합니다

0

560

1

입력값을 enum 값에 넣어주는거 이제 막혔나요?

0

503

1

템플릿 특수화 관련 질문

0

390

1

포인터 관련 질문합니다!

0

272

1

Unable to start assembler. Check your settings.

0

849

2

cpu선택

0

549

1

포인터 질문이 있습니다

0

331

1

20:35 에서 구조체 크기에 대한 질문입니다!

0

589

1

iterator 삭제관련

0

415

1

함수 호출을 디스어셈블러로 분석하다가 궁금점이 생겼습니다!

0

316

1

15 분 45초 대 질문

0

317

0

스택 프레임 질문합니다!

2

312

1

오른값 참조 in 게임

0

391

0

동적할당 질문이 있습니다

0

457

1

안녕하세요 메모리에 대해 질문드립니다.

0

312

1

함수객체 의 매개변수

0

366

1

복사생성자

0

439

1

main이나 endl 부분이 주황색으로 표시된건 어떻게 하나요

0

430

1

포인터 실습 강의를 보고 궁금한게 있습니다.

0

359

1

스택 오버플로우

2

801

1