널 종료 바이트 문자열
널 종료 바이트 문자열 (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 — 문자를 대문자로 변환해요
여기서 한 가지 주의할 점이 있어요. to나 is로 시작하고 뒤에 소문자가 이어지는 이름의 함수는, 앞으로 <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) — 두 문자열의 일부 문자를 이어 붙여요
- strxfrm —
strcmp가strcoll과 같은 결과를 내도록 문자열을 변환해요 - 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)
- strerror, strerror_s(C11), strerrorlen_s(C11) — 주어진 오류 코드의 텍스트 버전을 반환해요
더 알아보기
- 이 페이지는 개관이에요. 실제 함수 하나하나가 궁금하다면 atoi나 isalpha처럼 개별 문서를 열어 보시면 돼요.
- 좁은 문자(1바이트)뿐 아니라 넓은 문자(와이드 문자) 기준의 문자열 함수들도 cppreference에 있어요. 넓은 문자를 다룬다면 그 문서를 함께 보면 좋아요.
- cppreference 원문에서 바이트 문자열 항목 전체를 확인할 수 있어요.