본문 바로가기

Programming/C

C 언어 | 문자열과 포인터

이제껏 문자열을 저장하기 위해 CS50 라이브러리에 포함된 string 자료형을 사용했다. 하지만 이는 실제  C에서는 존재하지 않는 자료형이다.

 

학습 목표

문자열 형태의 새로운 자료형인 string이 어떻게 정의되었는지 설명할 수 있다.

 

문자열과 포인터

변수 s에 "EMMA"라는 값을 저장하는 프로그램을 예로 들어보자.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    string s = "EMMA";
    printf("%s\n",s);
}

 

 

cs50 라이브러리를 사용해, 즉 string 타입을 사용해 값을 출력한 모습이다.

 

프로그램을 설명하자면 다음과 같다.

  • "EMMA"는 문자의 배열이고 s[0]=E, s[1]=M과 같이 하나씩 표현될 수 있다.
  • 문자의 마지막인 s[4]는 \0로, 0으로 이루어진 바이트이며 문자열의 끝을 표시하는 널 종단 문자다.
  • 변수 s는 결국 이러한 문자열을 가리키는 포인터다.
  • 구체적으로 변수 s는 문자열의 첫 번째 문자인 s[0]을 가리킨다.

 

실제 cs50 라이브러리를 보면 string 자료형은 아래와 같이 정의되어 있다.

typedef char *string

typedef는 새로운 자료형을, char *는 문자에 대한 포인터를, string은 자료형의 이름을 의미한다.

 

앞의 예제 프로그램을 string 자료형 없이 다시 작성해보면 다음과 같다.

 

#include <stdio.h>

int main(void)
{
    char *s = "EMMA";
    printf("%s\n", s);
}

실제 값 출력

 

형식 지정자 %p를 사용하면 주소 역시 출력이 가능하다.

 

메모리 주소 출력

이때 출력된 주소는 "EMMA"라는 문자열의 첫 값, 즉 s[0]에 해당하는 메모리 주소이다.

 

생각해보기

string 자료형을 정의해서 사용하면 어떤 장점이 있을까?

처음 배우는 사람들이 쉽게 문자열을 정의할 수 있다. 포인터에 대한 개념이 필요 없어 간단하고 가독성이 좋다.

 

 


 

이 글은 네이버 부스트 코스 David J. Malan(데이비드 J. 말란) 교수님의 모두를 위한 컴퓨터 과학(CS50 2019) 강의를 수강하고 작성한 글입니다. 본 강좌 내 실습에서는 CS50 Sandbox를 사용합니다.

 

 

모두를 위한 컴퓨터 과학 (CS50 2019)

부스트코스 무료 강의

www.boostcourse.org