궁금증 연구소

안녕하세요. 궁금증연구소입니다.

오늘 포스팅 주제는 "[C언어] 문자열 포인터와 문자열의 차이점"입니다.

 

문자열포인터와 문자열의 차이점

문자열을 보관하는 방법은 두 가지이다. 문자열 포인터를 저장하는 방식과 재열에 저장하는 방식이다.

char*na = "Mega"에서 Mega는 문자열 상수가 보관되는 메모리의 데이터 영역에 보관된다. 즉, 값을 바꾸지 못한다.

char na [20] = "Mega"에서 Mega는 스택 영역에 저장된다. 따라서 값을 바꿀 수 있다.

 

위 두 가지 경우의 출력 결과를 살펴보자.

코드1
코드1 출력값

데이터 영역에 저장된 Mega는 getStr() 함수가 끝나더라도 사라지지 않고 값이 남아 있어 Mega가 정상 출력되었다.

 

코드2

반면 문자열에 저장된 Mega는 getStr() 함수가 끝나면 사라지는 stack의 값이기 때문에 리턴되는 na의 값은 존재하지 않는 값이 된다. 이경우 아래와 같이  Warning W8075 ex10.cpp 18: Suspicious pointer conversion in function getStr() 에러가 발생한다.

 

Warning W8075 ex10.cpp 18: Suspicious pointer conversion in function getStr()

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading