다음을 통해 공유


문자열 함수 차이점

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

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

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

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

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

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

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

 

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

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

주의

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

 

Windows API 유니코드