C

C 공부 8일차 Chapter 13 문자열 표현의 두가지 방법

yeooniyeoon 2022. 9. 13. 23:49
728x90
SMALL

문자열 표현의 두 가지 형태

 

문자열을 표현하는 방식에는 두 가지 방법이 있다.

 

첫번째는 '변수 형태의 문자열'로 배열에 문자열을 저장하는 방법이다.

 

char str[] = "Hello world";

 

"Hello world"라는 문장을 배열에 저장하는 방식으로

str에는 문장의 첫글자인 H의 주소값이 저장된다.

이는 배열에 저장된 형태이므로 값의 변경이 가능하다.

그러나 str은 항상 H의 위치를 가리키고 있어야 하므로 가리키는 위치는 변경할 수 없다.

 

 

 

 

 

두번째 방법은 '상수 형태의 문자열'로 포인터를 이용해 저장하는 방법이다.

 

char * str = "Hello world";

 

이는 char형 포인터 변수에 메모리 공간 어딘가에 저장된

Hell world라는 문자열의 주소값을 저장하는 방법이다.

이 방식은 문자열이 상수형태로 저장되기 때문에 문자열의 내용을 변경할 수 없다.

그러나 str은 문자열이 저장된 공간의 주소를 가리키고 있기 때문에

str이 가리키는 값은 변경이 가능하다.

 

예를 들어 "Hello world"를 가리키는 포인터를 "Good morning"이라는 문자열을 가리키도록 변경한다면

 

char * str = "Hello world";
str = "Good morning";
printf("%s", str);

 

위처럼 쓸 수 있다.

str은 "Hello world"가 아닌 "Good morning"이 저장된 메모리의 주소를 가리키게 되는 것이다.

 

 

char str1[] = "Hello world";
char * str2 = "Hello world";

str1[0] = 'B';
str2[0] = 'B';

printf("str1 = %s \n", str1);
printf("str2 = %s \n", str2);

 

위 코드는 상수 형태의 문자열은 변경이 불가하다는 것을 나타낸다.

변수 형태의 문자열과 상수 형태의 문자열을 선언 후 각 문자열의 첫글자를 'B'로 변경한다.

 

배열 형태인 str1은 수정이 가능하므로 에러가 발생하지 않지만

포인터인 str2는 상수 형태의 문자열이므로 수정이 불가하여 문제가 발생한다.

 

 

 

 

 

 

 

문자열

큰 따옴표로 묶인 문자열은 해당 문자열을 메모리 공간에 저장 후

문자열의 첫 문자가 저장된 주소값을 반환한다.

 

예로 printf를 사용해 문자열 저장 시

 

printf("yeoon");

 

메모리에 "yeoon"이라는 문자열이 저장되고 해당 문자열이 저장된 주소를 반환한다

문자열이 123456이라는 주소에 저장되었다고 한다면

 

printf(123456);

 

위와 같은 모양이 되는 것이다.

결국 printf 함수는 매개변수로 받은 문자열을 바로 출력하는 것이 아니라

문자열이 저장된 후 반환된 주소값에 해당하는 내용을 출력하는 것이다.

 

728x90
반응형
SMALL

'C' 카테고리의 다른 글

C 공부 10일차 Chapter 14 함수와 포인터  (0) 2022.09.15
C 공부 9일차 Chapter 13 포인터 배열  (0) 2022.09.14
C 공부 7일차 Chapter 13  (0) 2022.09.12
C 공부 6일차 Chapter 13  (0) 2022.09.10
C 공부 5일차 Chapter 12  (0) 2022.09.09