이번 편의 목표: 문자열을 문자 배열로 다루고, 끝의 널 문자와 바이트 수를 확인합니다.
C 문자열은 char 배열입니다. 마지막에는 널 문자가 붙습니다. 널 문자는 값이 0인 char이고, 글자를 끝내라는 표시입니다. printf의 %s와 strlen은 이 문자를 만날 때까지 읽습니다.
#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입니다.
COMMENTS
댓글 0
이 글에 대한 의견이나 질문을 남겨 주세요.
댓글은 구글이나 카카오로 시작한 뒤에 남길 수 있습니다.
등록된 댓글이 없습니다.