✔ 학습목표
문자열이 C에서 정의되는 방식과 메모리에 저장되는 방식을 설명할 수 있다.
문자열과 배열
문자열(string) 자료형의 데이터는 사실 문자(char) 자료형 데이터들의 배열이었다. string s = "Hi!"; 와 같이 문자열 s가 정의되어 있다고 생각해보자. s는 문자의 배열이기 때문에 메모리상에 아래처럼 저장되고, 인덱스(예) s[0], s[1] 등)로 각 문자에 접근할 수 있다.
여기서 가장 끝의 '\n'은 문자열의 끝을 나타내는 널 종단문자다. 이는 모든 비트가 0인 1바이트를 의미한다.
string names[4];
names[0] = "EMMA";
names[1] = "RODRIGO";
names[2] = "BRIAN";
names[3] = "DAVID";
printf("%s\n", names[0]);
printf("%c%c%c%c\n", names[0][0], names[0][1], names[0][2], names[0][3]);
위의 예를 보자. 첫 번째 printf 함수는 형식 지정자 %s를 사용해 names[0], 즉 'EMMA'를 출력할 것이다. 두 번째 printf 함수는 형식 지정자로 %s가 아닌 %c를 사용한다. 그런데 똑같이 'EMMA'를 출력할 것이다. 왜일까?
앞서 말했듯 문자열(string) 자료형의 데이터는 문자(char) 자료형 데이터들의 배열이다. 두 번째 printf는 첫 번째에서 처럼 문자열에 접근하는 것이 아니라, 2차원 배열의 문자에 접근한다. names[0][0]은 E가, names[0][1]은 M이 되어 결국 'EMMA'가 출력되는 것이다. 실제 메모리상에 names가 저장된 모습은 다음과 같다.
생각해보기
널 종단 문자는 왜 필요할까?
문자열에서 '\n'은 문자열의 끝을 알려주기 위해서 사용된다. 또한 여러 개의 문자열이 있을 때 각 문자열을 구분할 수 있게 한다.
이 글은 네이버 부스트 코스 David J. Malan(데이비드 J. 말란) 교수님의 모두를 위한 컴퓨터 과학(CS50 2019) 강의를 수강하고 작성한 글입니다. 본 강좌 내 실습에서는 CS50 Sandbox를 사용합니다.
'Programming > C' 카테고리의 다른 글
C 언어 | 명령행 인자 (0) | 2021.02.02 |
---|---|
C 언어 | 문자열의 활용 (0) | 2021.02.02 |
C 언어 | 배열 (0) | 2021.02.02 |
C 언어 | 사용자 정의 함수와 중첩 루프 (0) | 2021.01.31 |
C 언어 | 자료형, 형식 지정자, 연산자 (0) | 2021.01.30 |