널 종료 바이트 문자열

널 종료 바이트 문자열 (Null-terminated byte strings)

C에서 문자열을 저장하는 가장 기본적인 방식이에요. 문자들이 0이 아닌 값으로 쭉 이어지고, 마지막에 값이 0인 바이트(널 종료 문자)로 끝나는 형태를 말하지요. 문자열을 다루는 함수들 대부분이 이 '널 종료' 약속을 전제로 동작해요.

출처: cppreference

본문

정의 (Definition)

널 종료 바이트 문자열(NTBS, null-terminated byte string)은 값이 0이 아닌 바이트들이 나열되고, 그 뒤에 값이 0인 바이트(종료 널 문자)가 따라오는 시퀀스예요. 바이트 문자열의 각 바이트는 어떤 문자 집합의 한 문자를 인코딩해요. 예를 들어 문자 배열 {'\x63','\x61','\x74','\0'}ASCII 인코딩에서 "cat" 문자열을 담은 NTBS예요.

함수 (Functions)

바이트 문자열 관련 함수는 역할별로 묶을 수 있어요. cppreference의 함수 목록을 정리해 볼게요.

문자 분류 (Character classification)<ctype.h>의 함수들이에요.

  • isalnum — 문자가 영숫자인지 확인해요
  • isalpha — 문자가 알파벳인지 확인해요
  • islower — 문자가 소문자인지 확인해요
  • isupper — 문자가 대문자인지 확인해요
  • isdigit — 문자가 숫자인지 확인해요
  • isxdigit — 문자가 16진수 문자인지 확인해요
  • iscntrl — 문자가 제어 문자인지 확인해요
  • isgraph — 문자가 그래픽 문자인지 확인해요
  • isspace — 문자가 공백 문자인지 확인해요
  • isblank(C99) — 문자가 공백(blank) 문자인지 확인해요
  • isprint — 문자가 출력 가능한 문자인지 확인해요
  • ispunct — 문자가 구두점 문자인지 확인해요
  • tolower — 문자를 소문자로 변환해요
  • toupper — 문자를 대문자로 변환해요

여기서 한 가지 주의할 점이 있어요. tois로 시작하고 뒤에 소문자가 이어지는 이름의 함수는, 앞으로 <ctype.h>에 추가될 수 있어요. 그래서 이 헤더를 포함하는 프로그램은 그런 이름을 직접 정의하지 않는 게 좋아요. 미래에 표준 함수와 이름이 충돌할 수 있거든요.

문자·문자열 변환 (Conversions)<stdlib.h> 계열이에요.

  • atof — 바이트 문자열을 부동소수점 값으로 변환해요
  • atoi, atol, atoll(C99) — 바이트 문자열을 정수 값으로 변환해요
  • strtol, strtoll(C99) — 바이트 문자열을 정수 값으로 변환해요
  • strtoul, strtoull(C99) — 바이트 문자열을 부호 없는 정수 값으로 변환해요
  • strtof, strtod, strtold(C99) — 바이트 문자열을 부동소수점 값으로 변환해요
  • strfromf, strfromd, strfroml(C23) — 부동소수점 값을 바이트 문자열로 변환해요
  • strtoimax, strtoumax(C99) — 바이트 문자열을 intmax_t 또는 uintmax_t로 변환해요

문자열 조작 (String manipulation)

  • strcpy, strcpy_s(C11) — 문자열을 다른 데 복사해요
  • strncpy, strncpy_s(C11) — 문자열의 일부 문자를 복사해요
  • strcat, strcat_s(C11) — 두 문자열을 이어 붙여요
  • strncat, strncat_s(C11) — 두 문자열의 일부 문자를 이어 붙여요
  • strxfrmstrcmpstrcoll과 같은 결과를 내도록 문자열을 변환해요
  • strdup(C23) — 문자열의 복사본을 할당해요
  • strndup(C23) — 지정한 크기의 문자열 복사본을 할당해요

문자열 검사 (String examination)

  • strlen, strnlen_s(C11) — 주어진 문자열의 길이를 반환해요
  • strcmp — 두 문자열을 비교해요
  • strncmp — 두 문자열의 일부 문자를 비교해요
  • strcoll — 현재 로케일에 따라 두 문자열을 비교해요
  • strchr — 문자가 처음 나타나는 위치를 찾아요
  • strrchr — 문자가 마지막으로 나타나는 위치를 찾아요
  • strspn — 다른 바이트 문자열에 있는 문자만으로 구성된 최대 초기 구간의 길이를 반환해요
  • strcspn — 다른 바이트 문자열에 없는 문자만으로 구성된 최대 초기 구간의 길이를 반환해요
  • strpbrk — 어떤 문자열에서 다른 문자열의 어떤 문자든 처음 나타나는 위치를 찾아요
  • strstr — 부분 문자열이 처음 나타나는 위치를 찾아요
  • strtok, strtok_s(C11) — 바이트 문자열에서 다음 토큰을 찾아요

문자 배열 조작 (Character array manipulation) — 바이트 단위로 동작하는 함수들이에요.

  • memchr — 배열에서 문자가 처음 나타나는 위치를 찾아요
  • memcmp — 두 버퍼를 비교해요
  • memset, memset_explicit(C23), memset_s(C11) — 버퍼를 문자로 채워요
  • memcpy, memcpy_s(C11) — 버퍼를 다른 데 복사해요
  • memmove, memmove_s(C11) — 버퍼를 다른 데 옮겨요
  • memccpy(C23) — 지정한 구분 문자 이후에서 멈추며 버퍼를 복사해요

기타 (Miscellaneous)

더 알아보기

  • 이 페이지는 개관이에요. 실제 함수 하나하나가 궁금하다면 atoiisalpha처럼 개별 문서를 열어 보시면 돼요.
  • 좁은 문자(1바이트)뿐 아니라 넓은 문자(와이드 문자) 기준의 문자열 함수들도 cppreference에 있어요. 넓은 문자를 다룬다면 그 문서를 함께 보면 좋아요.
  • cppreference 원문에서 바이트 문자열 항목 전체를 확인할 수 있어요.