널 종단 문자열

널 종단 문자열(-縱斷文字列, null-terminated string)은 컴퓨터 프로그래밍에서 문자열 및 널 문자('\0', ASCII에서는 NUL)로 끝나는 배열로 저장되는 문자열이다. 그 외에 C 프로그래밍 언어를 가리키는 C 문자열, 그리고 ASCIIZ(참고: C 문자열은 ASCII의 사용을 암시하지 않음)라고도 한다.

C 문자열의 길이는 (처음) NUL 바이트를 검색함으로써 발견된다. 문자열 길이와 관련한 O(n)(선형 시간)의 소요로 인해 속도가 저하될 수 있다. 다시 말해, NUL은 문자열 안에 위치할 수 없음을 뜻하며 NUL은 오직 문자열의 끝을 알리는 목적으로만 사용된다.

구현

편집

C 프로그래밍 언어는 널 종단 문자열을 기본 문자열의 형으로 지원한다.[1] C 표준 라이브러리에서 문자열 처리를 위한 수많은 기능들이 있다. 그 기능은 다음을 포함한다:

  • 문자열 길이의 결정
  • 한 문자열을 다른 문자열로 복사
  • 한 문자열을 다른 문자열 뒤에 추가
  • 문자열 내 특정 문자의 처음 또는 마지막 발생 부분 찾기
  • 주어진 집합에 포함되거나 포함되지 않는 문자의 첫 발생 부분을 문자열 내에서 찾기
  • 문자열 내의 서브스트링의 첫 발생 부분을 찾기
  • 두 문자열을 사전적으로 비교하기
  • 문자열을 여러 서브스트링으로 나누기
  • 숫자값 또는 문자값을 인쇄 가능한 출력 문자열로 서식 지정
  • 인쇄 가능한 문자열을 숫자값으로 구문 분석
  • 싱글 바이트확장 문자 문자열 인코딩 간 상호 변환
  • 싱글 바이트나 확장 문자 문자열을 멀티 바이트 문자의 문자열과 상호 변환

제한

편집

구현은 쉽지만, 표현은 오류와 성능 문제를 일으키는 경향이 있다.

NUL 종단은 역사적으로 보안 문제를 일으켜왔다.[2] 문자열 중간에 삽입된 NUL 바이트는 예측하지 못하도록 문자열을 잘라버린다. 일반적인 버그는 NUL을 위한 추가적인 공간을 할당하지 못하는 것으로, 이로 인해 인접한 메모리를 초과하여 기록된다. 다른 것으로는 NUL을 아예 기록하지 못하는 것으로, 테스트 중에는 발견하지 못할 때가 있는데 그 이유는 NUL이 우연히 과거의 동일한 메모리 블록을 사용하고 있기 때문에 그러하다.

같이 보기

편집

각주

편집
  1. Richie, Dennis (2003). “The Development of the C Language”. 2013년 6월 22일에 원본 문서에서 보존된 문서. 2011년 11월 9일에 확인함. 
  2. Rain Forest Puppy (1999년 9월 9일). “Perl CGI problems”. 《Phrack Magazine》 (artofhacking.com) 9 (55): 7. 2016년 1월 3일에 확인함.