CS 기초/메모리

[CS50] 문자열

담크 2021. 8. 20. 23:22

지금까지 문자열을 string이라는 자료형을 사용해 저장해왔습니다. 그런데 C에는 string이 실제로 존재하지 않는 자료형이라고 합니다. 그렇다면 문자열이 실제로 메모리상에 어떻게 저장되어있는지, 저장되어있는 문자열에 어떻게 접근해야 하는지 공부해보도록 하겠습니다.

 

지금까지 배우면서 문자열을 변수에 저장하기 위해 CS50 라이브러리에 있는 string 자료형을 사용해왔습니다.

예전부터 문자열은 문자의 배열이라고 배웠는데 만약

string s = "EMMA";

라는 코드가 있다면

그림과 같이 s[0], s[1], ... 처럼 하나의 문자가 배열의 한 부분을 차지하고 마지막엔 \0인 null 종단 문자로 문자열의 끝을 나타내 줬습니다.

 

그렇다면 문자열의 주소는 어떻게 가리키게 될까요??

위의 변수 s는 이러한 문자열을 가리키는 포인터가 되는데 정확히는 문자열의 가장 첫 번째인 s[0]을 가리키게 됩니다.

 

실제로 CS50 라이브러리를 찾아보면 string 자료형은

typedef char *string

이라고 정의되어 있습니다.

 

지난 포스팅에서 *은 그 실제 값을 의미한다고 배웠는데 하나하나 나누어 본다면

typedef : 새로운 자료형을 의미

char *   : 문자에 대한 포인터를 의미

string    :  자료형의 이름을 의미

합니다.

따라서 string s = "EMMA"; 와 char *s = "EMMA";는 동일하게 동작합니다.

 

결론적으로 string의 포인터는 문자열에서 첫번째 문자만을 가리키고 \0에 의해 어디까지를 읽어와야 하는지 알게 됩니다.


출처

본 내용은 CS50의 2019년 강의를 듣고 작성했습니다. (개념이 어느 정도 정리되면 최신강의도 다시 듣고 수정할 내용 있으면 수정하겠습니다.)

 

강의 자료는 EdX에서 무료로 사용할 수 있고 boostcourse에서 한글 강의로도 들을 수 있습니다.

'CS 기초 > 메모리' 카테고리의 다른 글

[CS50] 메모리 교환, 스택, 힙  (0) 2021.08.24
[CS50] 문자열 복사  (0) 2021.08.22
[CS50] 문자열 비교  (0) 2021.08.21
[CS50] 포인터  (0) 2021.08.19
[CS50] 메모리 주소  (0) 2021.08.18