다음을 통해 공유


텍스트 출력 문자열의 길이 지정

여러 글꼴 및 텍스트 출력 함수에는 텍스트 출력 문자열의 길이를 지정하는 매개 변수가 있습니다. 일반적인 예는 DrawTextExcchText 매개 변수입니다.

이러한 각 함수에는 "ANSI" 버전과 유니코드 버전(예: DrawTextExADrawTextExW각각)이 있습니다. 각 함수의 "ANSI" 버전의 경우 길이는 BYTE 수로 지정되고 유니코드 함수의 경우 WORD 수로 지정됩니다.

이를 "문자 수"로 생각하는 것이 전통입니다. 이는 일반적으로 영어를 포함한 많은 언어에 대해 정확하지만 일반적으로 정확하지는 않습니다. "ANSI" 문자열에서 SBCS 코드 페이지의 문자는 각각 1바이트씩 사용되지만 DBCS 코드 페이지의 문자는 대부분 2바이트를 사용합니다. 마찬가지로, 현재 정의된 대부분의 유니코드 문자는 기본 다국어 평면(BMP)에 포함되어 있으며, 그 UTF-16 표현 방식은 하나의 WORD로 충분합니다. 그러나 보조 문자는 유니코드에서 '대리쌍'을 사용하여 표현되어 두 개의 WORD가 필요합니다.

이러한 각 함수는 길이 수를 사용합니다. 각 함수의 "ANSI" 버전의 경우 길이는 NULL 종결자를 포함하지 않는 문자열의 BYTE 개수 길이로 지정됩니다. 유니코드 함수의 경우, 길이 계산은 NULL 종료 문자를 포함하지 않고, 바이트 수를 sizeof(WCHAR), 즉 2로 나눈 값으로 합니다. 문자 수는 문자열의 길이 개수와 같지 않을 수 있는 문자 수입니다. 경우에 따라 문자는 ANSI(예: DBCS 문자)에 대해 둘 이상의 BYTE를 사용하고 유니코드용 WORD(예: 서로게이트 문자)를 둘 이상 사용합니다. 또한 문자 모양을 하나 만들기 위해 여러 문자를 합성할 수 있으므로 문자 모양 수가 문자 수와 같지 않을 수 있습니다. 길이 수는 데이터의 양입니다. 문자 수는 하나의 엔터티로 처리되는 단위 수입니다. 글리프는 렌더링됩니다. 예를 들어, 유니코드에서는 길이가 3인 문자열이 2개의 문자로 구성되어, 1개의 글리프가 렌더링될 수 있습니다. 그러나 일반적으로 대부분의 유니코드 문자열 길이, 문자 수 및 렌더링된 문자 모양 수는 같습니다.

_tcslen()를 사용하여 문자열 길이를 가져올 수 있습니다. ANSI의 경우 _tcslen()는 바이트 수를 반환합니다. 유니코드의 경우 _tcslen()는 WCHAR(즉, WORD)의 수를 반환합니다.

항상 그려지지 않는 탭 및 소프트 하이픈과 같은 특수 처리 문자는 그려진 출력에 영향을 줄 수 있습니다. 문자열 길이 및 문자 수에 포함되지만 렌더링된 문자 모양으로 직접 표현되지는 않을 수 있습니다.

이러한 함수 중 일부를 사용하면 호출자가 길이를 -1 지정하여 문자열이 null로 종료되었음을 나타낼 수 있습니다. 이 경우 함수는 문자 수를 자동으로 계산합니다. 모든 함수가 이 기능을 제공하는 것은 아닙니다. 함수 단위로 지정됩니다. 개별 함수 설명서를 참조하세요.