8.4 스트링 처리와 변환
C 언어에서 스트링을 처리할 때, 소스와 실행 환경에서 사용한 인코딩 방식이 얼마든지 다를 수 있으므로 인코딩 방식에 독립적인 인터페이스를 구성해야 한다. 이때 가장 중요한 부분은 언어에서 지원한다. 즉, 'a'나 '\n' 같은 정수형 문자 상수와 "hello:\tx" 같은 스트링 리터럴을 제공하며 각 플랫폼에 맞게 처리된다. 앞에서 설명했듯이 상수 타입 중 정수(int)가 가장 좁다. 참고로 초창기부터 'a'와 같은 문자 상수를 char가 아닌 int 타입으로 표현했다. 문자 클래스를 다뤄야 한다면 이런 상수를 처리하는 작업이 좀 번거로울 수 있다.
C 라이브러리는 ctype.h 헤더 파일을 통해, 가장 흔히 사용하는 클래스를 다루는 함수와 매크로를 제공한다. 여기에는 isalnum, isalpha, isblank, iscntrl, isdigit, isgraph, islower, isprint, ispunct, isspace, isupper, isxdigit과 같은 분류기(classifier)와 toupper, tolower와 같은 변환기(conversion)가 있다. 이 역시 초창기부터 굳어진 관례에 따라 int 타입 인수를 받아서 int 타입 값을 리턴하도록 구성돼 있다. 표 8-11은 분류기를 정리한 것이다. toupper와 tolower 함수는 알파벳 문자를 각각 대문자와 소문자로 변환하고, 알파벳이 아닌 문자는 원래 형태 그대로 유지한다.
이 표를 보면 앞에서 몇 차례 본 줄바꿈 문자('\n')를 비롯한 몇 가지 특수 문자가 있다. 이런 특수 문자의 인코딩 방식과 의미는 표 8-12에 정리돼 있다.