이번 편의 목표: 문자열을 문자 배열로 다루고, 끝의 널 문자와 바이트 수를 확인합니다.

C 문자열은 char 배열입니다. 마지막에는 널 문자가 붙습니다. 널 문자는 값이 0인 char이고, 글자를 끝내라는 표시입니다. printf의 %s와 strlen은 이 문자를 만날 때까지 읽습니다.

C
#include <stdio.h>
#include <string.h>

int main(void) {
    char title[32];
    char english[] = "ant";

    snprintf(title, sizeof(title), "%s", "개미");
    printf("%s\n", title);
    printf("%zu\n", strlen("개미"));
    printf("%zu\n", strlen(english));
    printf("%d\n", english[3] == '\0');
    return 0;
}

개미는 화면에 두 글자로 보이지만 UTF-8 바이트 수는 6입니다. strlen은 글자 수가 아니라 널 문자 앞의 바이트 수를 반환하므로 6이 나옵니다. english인 ant의 길이는 3이고, 배열의 네 번째 칸 english[3]은 널 문자이므로 마지막 비교는 1입니다.

snprintf는 대상 배열의 크기를 받아, 그 안에 널 문자까지 넣습니다. 크기를 넘기는 복사는 배열 밖을 침범합니다. title[32]에 긴 문장을 넣을 때도 sizeof(title)을 함께 넘깁니다.

직접 해 보기

english를 book으로 바꾸고 strlen과 널 문자의 위치를 다시 확인하세요.

해설

book의 바이트 수는 4입니다. 널 문자는 인덱스 4에 있습니다. 인덱스 3은 마지막 글자 k입니다.