C언어와 문자열 — 문자 배열·널 종료 문자·char 배열 초기화·크기 지정 | 기초 C언어 8.3.1

기초 C언어Chapter 08 배열 › Section 03 문자열과 char 배열

8.3.1 C언어와 문자열

별도의 자료형 없이 char 배열로 다루는 C언어의 문자열. 끝을 알리는 널 문자 \0과 두 가지 초기화 방식, 크기를 정할 때의 주의점.

교재 수록 위치
교재
『기초 C언어』 · 이은상 · 부크크 · 364쪽
단원
Chapter 08 배열 › Section 03 문자열과 char 배열 › C언어와 문자열
쪽수
245p ~ 247p3쪽
세부 내용
문자열 = 문자 배열 · 널(Null) 종료 문자 · char 배열 선언과 초기화 · 크기 지정 시 주의점
학습 목표
문자열을 char 배열로 이해하고, 널 종료 문자를 고려하여 배열을 초기화하고 크기를 정함
영상 목차 · 원하는 부분부터 보기
  1. 0:00 · 강의 소개와 문자 배열
  2. 2:39 · 문자열의 끝을 알리는 널 문자
  3. 4:18 · 문자열 초기화의 두 방법
  4. 6:30 · 배열 크기 지정 시 주의점
  5. 7:26 · 핵심 정리

01미뤄 둔 널 문자와 배열의 관계교재 245p

  • 3.4.2에서는 문자열 상수의 끝에 널 문자 \0이 붙는다는 점까지만 확인하고, \0과 배열의 관계는 8장으로 미룸. 4.3.3의 char name[10]도 마지막 한 자리는 널 문자 몫이라고만 짚고 넘어감.
  • 이번 편에서는 문자열을 char 배열로 다시 살펴봄. 문자열 = 문자 배열, 널 종료 문자, 선언과 초기화, 크기 지정 시 주의점의 네 가지 순서.

02문자열 = 문자 배열교재 245p

  • C언어에는 int나 double처럼 문자열만을 위한 기본 자료형이 없음. 대신 문자(char)들의 배열을 이용하여 문자열을 다루는 방식.
  • "Hello"는 H, e, l, l, o 다섯 문자의 연속적인 집합으로 취급됨. 8.1.1에서 본 배열과 같은 짜임에 칸마다 문자가 들어 있는 구조.
  • "Hello"를 담은 배열은 인덱스 0~4에 문자 다섯, 인덱스 5에 널 종료 문자가 놓여 모두 여섯 칸. 글자는 다섯이지만 칸은 여섯이 필요한 까닭.

03끝을 알리는 널 종료 문자교재 245p

  • C언어 문자열의 가장 핵심적인 규칙 — 모든 문자열의 끝에는 널(Null) 종료 문자 \0이 포함되어야 함. 눈에 보이지 않는 문자.
  • 문장의 끝을 알리는 마침표, 책의 마지막을 알리는 ‘The End’ 표시와 같은 구실. 문자열이 끝나는 자리를 알려 주는 표시.
  • printf 같은 함수는 널 문자를 만날 때까지 메모리에서 문자를 하나씩 읽어 화면에 출력. 끝은 글자 수가 아니라 \0의 위치로 판단.

널 문자가 없으면 끝을 알 수 없음

\0이 빠진 문자열은 어디서 끝나는지 알 수 없어, 함수가 엉뚱한 메모리 영역까지 계속 읽어 들이며 오류를 일으킬 수 있음. Hello 뒤에 알 수 없는 글자가 줄줄이 찍히는 것이 흔한 모습. \0의 0은 알파벳 O가 아니라 숫자 0이라는 점도 주의.

04큰따옴표를 이용한 초기화(권장)교재 246p

  • 문자열을 저장하려면 문자열과 널 문자를 모두 담을 만큼 충분한 크기의 char 배열을 선언. 초기화 방법은 두 가지.
  • char str[] = "Hello"; — 가장 쉽고 일반적인 방법. 컴파일러가 문자열의 길이를 자동으로 계산하고 맨 끝에 \0을 자동으로 추가.
  • 대괄호를 비워 둔 꼴은 8.1.1의 배열 크기 자동 계산과 같음. 결과는 다섯 글자에 널 문자 한 글자를 더한 6개의 char 공간, 메모리에는 {'H', 'e', 'l', 'l', 'o', '\0'} 순서로 저장.

05중괄호를 이용한 초기화교재 246p

  • 문자를 하나씩 작은따옴표로 감싸 중괄호 안에 나열하는 방법도 가능. 이 경우 끝을 알리는 \0을 반드시 직접 추가.
  • 상세 코드는 교재 245~246p의 두 예제에서 확인. 두 방식의 저장 결과는 같고, 널 문자를 누가 넣는지가 차이.
초기화 방식형식널 문자
큰따옴표(권장)char str[] = "Hello";컴파일러가 자동 추가
중괄호작은따옴표로 감싼 문자를 쉼표로 나열반드시 직접 적음

중괄호 방식에서 \0을 빠뜨리면

문자 다섯만 나열하면 문자 배열일 뿐 문자열의 끝 표시가 없는 상태. 널 문자가 없을 때와 마찬가지로 끝을 알 수 없는 문자열이 되므로, 큰따옴표 방식을 권장하는 이유.

06크기 지정 시 주의점과 다음 편교재 246~247p

  • 크기를 직접 지정할 때는 저장하려는 문자의 개수보다 최소 1만큼 더 크게. 마지막 널 문자의 공간을 확보하기 위함.
  • "Hello"(5글자)는 최소 char str[6], "C lang"(6글자)은 최소 char str[7] 이상. 공백 한 칸도 한 글자로 셈.
  • 정리하면 배열의 크기 ≥ 문자의 개수 + 1. 4.3.3의 name[10]에 아홉 글자까지만 담을 수 있던 까닭.
  • 다음 편 8.3.2에서는 char 배열에 담은 문자열을 화면에 출력하고 키보드로 입력받는 방법을 다룸.

이 절의 핵심 정리

  1. C언어에는 문자열 전용 기본 자료형이 없어 문자열을 char 배열로 다룬다.
  2. 모든 문자열의 끝에는 눈에 보이지 않는 널 종료 문자 \0이 포함되어야 한다.
  3. printf 같은 함수는 널 문자를 만날 때까지 문자를 하나씩 읽어 출력한다.
  4. 큰따옴표로 초기화하면 널 문자가 자동으로 추가되지만, 중괄호로 초기화하면 직접 적어야 한다.
  5. 배열 크기를 직접 지정할 때는 저장할 문자의 개수보다 최소 1만큼 크게 정한다.
강의 자료8.3.1 C언어와 문자열 1 / 10

번호를 누르면 해당 장으로 바로 이동합니다 · 방향키 ← → 로도 넘길 수 있습니다
다음 절 · 8.3.2 문자열의 입력과 출력 교재 248p~250p — printf와 scanf의 %s로 char 배열 문자열을 출력하고 입력받는 방법 ↗

더 자세한 내용은 교재에서

이 글은 『기초 C언어』 245p~247p의 내용을 강의 영상에 맞춰 핵심만 간추린 요약입니다. 각 개념의 상세한 설명과 예제, 실습 코드, 임용시험 기출문제 풀이는 교재에서 다루고 있습니다.

댓글

이 블로그의 인기 게시물

2007년 국가직 9급 기계일반 기출문제 풀이

기계공작법 연습문제 130문 | 임용 기출 영상·교재 쪽수 바로가기