이제껏 문자열을 저장하기 위해 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를 사용합니다.
'Programming > C' 카테고리의 다른 글
C 언어 | 문자열의 복사 (0) | 2021.02.20 |
---|---|
C 언어 | 문자열의 비교 (0) | 2021.02.20 |
C 언어 | 포인터 (0) | 2021.02.19 |
C 언어 | 메모리 주소 (0) | 2021.02.19 |
C 언어 | 왜 배열을 선언할 때 상수 변수값을 크기로 지정할 수 없을까? (0) | 2021.02.04 |