다음을 통해 공유


문자열 함수 차이점

이 항목에서는 유니코드 및 문자 집합 정보를 처리하는 데 사용되는 문자열 함수 간의 차이점에 대해 설명합니다. 이러한 함수에는 유니코드Windows 코드 페이지 매개 변수를 지원하는 유니코드 및 Windows 코드 페이지 구현이 모두 있습니다.

다음 문자열 함수에는 특별한 주석이 필요하지 않습니다. 유니코드 및 Windows 코드 페이지 구현은 동일하게 작동합니다.

문자열 길이 함수 중 하나에서 검색하는 길이 값은 항상 일반 문자 너비(Windows 코드 페이지의 경우 8비트, 유니코드의 경우 16비트)를 기반으로 합니다. 이 값을 "문자 수"라고도 합니다. DBCS( 더블바이트 문자 집합 )를 사용하는 Windows 코드 페이지에는 실제로 두 개의 연속 바이트로 표현되는 일부 전체 너비 문자가 있으므로 이 용어는 엄격하게 정확합니다. 유니코드의 서로게이트도 비슷한 상황이 발생합니다.

다음 문자열 함수는 사용자가 제어판 선택하는 언어에서 파생된 현재 스레드의 로캘에 민감합니다. lstrcmplstrcmpi 함수는 ANSI 이름(예: strcmp)과 같은 바이트 비교를 수행하지 않습니다. 대신 로캘 규칙에 따라 문자열을 비교합니다.

다음 함수는 사용되는 버전에 따라 OEM 문자 집합과 현재 Windows 코드 페이지 또는 유니코드 간에 변환됩니다.

Print 함수(예: StringCbPrintf)는 형식 사양에 다음과 같은 새 데이터 형식과 변경된 데이터 형식을 제공하여 유니코드를 지원합니다. 이러한 형식 사양은 함수가 해당 입력 매개 변수를 해석하는 방식에 영향을 줍니다.

형식 사양 Windows 코드 페이지 버전의 데이터 형식 유니코드 버전의 데이터 형식
c CHAR WCHAR
C WCHAR CHAR
hc, hC CHAR CHAR
hs, hS LPSTR LPSTR
lc, lC WCHAR WCHAR
ls, lS LPWSTR LPWSTR
LPSTR LPWSTR
S LPWSTR LPSTR

 

출력 텍스트의 데이터 형식은 항상 함수 버전에 따라 달라집니다. 입력 매개 변수의 데이터 형식과 출력 텍스트의 데이터 형식이 동의하지 않는 경우 인쇄 함수는 필요에 따라 유니코드에서 현재 Windows 코드 페이지로 또는 그 반대로 변환을 수행합니다.

인쇄 함수의 유니코드 버전의 경우 출력 텍스트와 마찬가지로 형식 문자열은 유니코드입니다.

주의

버퍼 처리 불량은 버퍼 오버런과 관련된 많은 보안 문제에 연루됩니다. Strsafe.h 참조를 참조하세요. Strsafe.h에 정의된 함수는 코드에서 적절한 버퍼 처리를 위한 추가 처리를 제공합니다. 이러한 이유로 기본 제공 C/C++ 대응 항목과 특정 Microsoft Windows 구현을 대체하기 위한 것입니다. 자세한 내용은 보안 고려 사항: 국가별 기능을 참조하세요.

 

Windows API의 유니코드