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

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

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

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

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

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

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

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