Menu
Coddy logo textTech

널 종료 문자

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 13번째.

C에서 문자열은 문자 배열이라는 것을 배웠습니다. 하지만 문자열이 제대로 작동하게 만드는 중요한 세부 사항이 있습니다. 모든 C 문자열은 널 종료 문자(null terminator)라고 불리는 특수 문자로 끝나야 하며, 이는 \0으로 표기됩니다.

널 종료 문자(null terminator)는 문자열의 끝을 표시하는 ASCII 값이 0인 문자입니다. 이것이 없으면 printf와 같은 함수는 문자열이 어디에서 끝나는지 알 수 없으며, 무작위로 0 바이트를 만날 때까지 메모리를 계속 읽어 들여 종종 쓰레기 값(garbage output)을 출력하게 됩니다.

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// \0은 C에게 "문자열이 여기서 끝남"을 알려줍니다.

"Hello"와 같은 리터럴로 문자열을 초기화하면 C는 자동으로 널 종료 문자(null terminator)를 추가해 줍니다. 하지만 문자열을 한 글자씩 수동으로 직접 만들 때는 마지막에 \0을 추가하는 것을 잊지 말아야 합니다.

이 널 종료 문자(null terminator) 때문에 "Hello"와 같은 5글자 단어에는 6개 요소의 문자 배열이 필요합니다. \0를 위한 추가 공간이 하나 더 필요하기 때문입니다. 이 개념을 이해하는 것은 모든 C 문자열 함수가 문자열의 시작과 끝을 결정하는 방식의 기초가 되기 때문에 필수적입니다.

challenge icon

챌린지

쉬움

적절한 널 종료(null termination)와 함께 수동으로 문자 하나씩 초기화하여 문자열을 생성하고 다루는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:

  1. 정확히 5개의 요소를 가진 name이라는 이름의 문자 배열을 선언합니다.
  2. 적절한 널 종료와 함께 "John"을 철자대로 입력하기 위해 name 배열을 문자별로 수동 초기화합니다:
    • 첫 번째 요소: 'J'
    • 두 번째 요소: 'o'
    • 세 번째 요소: 'h'
    • 네 번째 요소: 'n'
    • 다섯 번째 요소: '\0' (널 종료 문자)
  3. 정확히 7개의 요소를 가진 city라는 이름의 두 번째 문자 배열을 선언합니다.
  4. 적절한 널 종료와 함께 "Boston"을 철자대로 입력하기 위해 city 배열을 문자별로 수동 초기화합니다:
    • 'B', 'o', 's', 't', 'o', 'n', 그리고 '\0'에 대해 개별 문자 할당을 사용합니다.
  5. printf%s 형식 지정자를 사용하여 두 문자열을 모두 출력합니다.
  6. 4개의 요소를 가진 test라는 이름의 세 번째 문자 배열을 생성하여 널 종료가 없을 때 어떤 일이 발생하는지 보여줍니다.
  7. test를 'A', 'B', 'C', 'D' 문자만으로 초기화합니다 (널 종료 문자 없음).
  8. 예측할 수 없는 출력을 보여주기 위해 %s를 사용하여 test 배열을 출력합니다.

출력 결과는 다음과 같은 형식으로 표시되어야 합니다:

Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]

이 챌린지는 수동 문자열 생성에 대한 이해, C 문자열에서 널 종료 문자 '\0'의 결정적인 중요성, 그리고 %s를 사용하는 printf가 문자열이 끝나는 위치를 알기 위해 널 종료 문자를 찾는 방식에 의존한다는 점을 테스트합니다.

치트 시트

C 문자열은 문자열의 끝을 표시하기 위해 반드시 널 종료 문자 \0로 끝나야 하는 문자 배열입니다.

널 종료 문자는 ASCII 값이 0이며, printf와 같은 함수에게 문자열이 어디서 끝나는지 알려줍니다:

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// \0은 C에게 "문자열이 여기서 끝남"을 알려줍니다

"Hello"와 같은 문자열 리터럴을 사용할 때, C는 자동으로 널 종료 문자를 추가합니다. 문자를 하나씩 사용하여 문자열을 만들 때는 수동으로 \0을 추가해야 합니다.

문자열은 널 종료 문자를 위해 하나의 추가 배열 요소가 필요합니다. "Hello"(5글자)는 6개의 요소를 가진 배열이 필요합니다.

직접 해보기

#include <stdio.h>

int main() {
    // TODO: 여기에 코드를 작성하세요
    // 지정된 대로 문자 배열을 선언하고 초기화합니다
    
    // 결과를 출력합니다
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Logic & Flow의 모든 레슨