안녕하세요. 궁금증연구소입니다.
오늘 포스팅 주제는 "[C언어] 문자열 포인터와 문자열의 차이점"입니다.
문자열을 보관하는 방법은 두 가지이다. 문자열 포인터를 저장하는 방식과 재열에 저장하는 방식이다.
char*na = "Mega"에서 Mega는 문자열 상수가 보관되는 메모리의 데이터 영역에 보관된다. 즉, 값을 바꾸지 못한다.
char na [20] = "Mega"에서 Mega는 스택 영역에 저장된다. 따라서 값을 바꿀 수 있다.
위 두 가지 경우의 출력 결과를 살펴보자.
데이터 영역에 저장된 Mega는 getStr() 함수가 끝나더라도 사라지지 않고 값이 남아 있어 Mega가 정상 출력되었다.
반면 문자열에 저장된 Mega는 getStr() 함수가 끝나면 사라지는 stack의 값이기 때문에 리턴되는 na의 값은 존재하지 않는 값이 된다. 이경우 아래와 같이 Warning W8075 ex10.cpp 18: Suspicious pointer conversion in function getStr() 에러가 발생한다.
c언어 버퍼비우기 (%*c) (0) | 2022.08.06 |
---|---|
[C언어] 구조체의 문자열포인터는 변경시 참조하는 모든 값이 변경됨 (0) | 2022.08.02 |
[리눅스] 500 Illegal port command Error 발생시 대처법(ftp) (0) | 2022.07.23 |
[c언어] strcat 사용시 주의할점 (0) | 2022.07.19 |
[c언어] strcpy 와 포인터 활용시 주의할 (0) | 2022.07.18 |