다음을 통해 공유


strlen, wcslen, _mbslen, _mbslen_l, _mbstrlen_mbstrlen_l

현재 로캘 또는 지정된 로캘을 사용하여 문자열의 길이를 가져옵니다. 이러한 함수의 더 안전한 버전을 사용할 수 있습니다. seestrnlen, strnlen_s, , wcsnlen_swcsnlen, _mbsnlen_mbsnlen_l, , _mbstrnlen_mbstrnlen_l

Important

_mbslen, _mbslen_l, _mbstrlen_mbstrlen_l는 Windows 런타임에서 실행되는 애플리케이션에서 사용할 수 없습니다. 자세한 내용은 유니버설 Windows 플랫폼 앱에서 지원되지 않는 CRT 함수를 참조하세요.

구문

size_t strlen(
   const char *str
);
size_t wcslen(
   const wchar_t *str
);
size_t _mbslen(
   const unsigned char *str
);
size_t _mbslen_l(
   const unsigned char *str,
   _locale_t locale
);
size_t _mbstrlen(
   const char *str
);
size_t _mbstrlen_l(
   const char *str,
   _locale_t locale
);

매개 변수

str
Null 종료 문자열입니다.

locale
사용할 로캘입니다.

반환 값

이러한 각 함수는 터미널 null을 제외한 문자 수를 str반환합니다. 문자열에 잘못된 멀티바이트 문자가 포함된 경우_mbstrlen을 반환하는 _mbstrlen_l((size_t)(-1))을 제외하고 오류를 나타내도록 예약된 반환 값은 없습니다.

설명

strlen은 문자열을 싱글바이트 문자열로 해석하므로 문자열에 멀티바이트 문자가 포함되어 있더라도 해당 반환 값은 항상 바이트 수와 동일합니다. wcslenstrlen의 와이드 문자 버전이고 wcslen의 인수는 와이드 문자열이고 문자 수는 와이드(2바이트) 문자로 계산합니다. 그렇지 않으면wcslenstrlen 이 동일하게 작동합니다.

보안 정보 이러한 함수는 버퍼 오버런 문제로 인해 발생하는 잠재적인 위협을 일으킵니다. 버퍼 오버런 문제는 자주 사용되는 시스템 공격 방법으로, 불필요한 권한 상승을 초래합니다. 자세한 내용은 버퍼 오버런 방지를 참조하세요.

기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.

일반 텍스트 루틴 매핑

TCHAR.H 루틴 _UNICODE_MBCS 정의되지 않음 정의된 _MBCS 정의된 _UNICODE
_tcslen strlen strlen wcslen
_tcsclen strlen _mbslen wcslen
_tcsclen_l strlen _mbslen_l wcslen

_mbslen 멀티 _mbslen_l 바이트 문자 문자열의 멀티바이트 문자 수를 반환하지만 멀티바이트 문자 유효성을 테스트하지는 않습니다. _mbstrlen_mbstrlen_l은 멀티바이트 문자의 유효성을 테스트하고 멀티바이트 문자 시퀀스를 인식합니다. _mbstrlen 또는 _mbstrlen_l에 전달된 문자열에 코드 페이지에 대해 잘못된 멀티바이트 문자가 포함되어 있으면 이 함수는 -1을 반환하고 errnoEILSEQ로 설정합니다.

출력 값은 로캘의 LC_CTYPE 범주 설정에 영향을 받습니다. 자세한 내용은 setlocale를 참조하세요. _l 접미사가 없는 이러한 함수 버전은 이 로캘 종속 동작에 현재 로캘을 사용하며, _l 접미사가 있는 버전은 전달된 로캘 매개 변수를 대신 사용하는 경우를 제외하고는 동일합니다. 자세한 내용은 Locale을 참조하세요.

요구 사항

루틴에서 반환된 값 필수 헤더
strlen <string.h>
wcslen <string.h> 또는 <wchar.h>
_mbslen, _mbslen_l <mbstring.h>
_mbstrlen, _mbstrlen_l <stdlib.h>

호환성에 대한 자세한 내용은 호환성을 참조하세요.

예시

// crt_strlen.c
// Determine the length of a string. For the multi-byte character
// example to work correctly, the Japanese language support for
// non-Unicode programs must be enabled by the operating system.

#include <string.h>
#include <locale.h>

int main()
{
   char* str1 = "Count.";
   wchar_t* wstr1 = L"Count.";
   char * mbstr1;
   char * locale_string;

   // strlen gives the length of single-byte character string
   printf("Length of '%s' : %d\n", str1, strlen(str1) );

   // wcslen gives the length of a wide character string
   wprintf(L"Length of '%s' : %d\n", wstr1, wcslen(wstr1) );

   // A multibyte string: [A] [B] [C] [katakana A] [D] [\0]
   // in Code Page 932. For this example to work correctly,
   // the Japanese language support must be enabled by the
   // operating system.
   mbstr1 = "ABC" "\x83\x40" "D";

   locale_string = setlocale(LC_CTYPE, "Japanese_Japan");

   if (locale_string == NULL)
   {
      printf("Japanese locale not enabled. Exiting.\n");
      exit(1);
   }
   else
   {
      printf("Locale set to %s\n", locale_string);
   }

   // _mbslen will recognize the Japanese multibyte character if the
   // current locale used by the operating system is Japanese
   printf("Length of '%s' : %d\n", mbstr1, _mbslen(mbstr1) );

   // _mbstrlen will recognize the Japanese multibyte character
   // since the CRT locale is set to Japanese even if the OS locale
   // isnot.
   printf("Length of '%s' : %d\n", mbstr1, _mbstrlen(mbstr1) );
   printf("Bytes in '%s' : %d\n", mbstr1, strlen(mbstr1) );

}
Length of 'Count.' : 6
Length of 'Count.' : 6
Length of 'ABCァD' : 5
Length of 'ABCァD' : 5
Bytes in 'ABCァD' : 6

참고 항목

문자열 조작
멀티바이트 문자 시퀀스 해석
Locale
setlocale, _wsetlocale
strcat, , wcscat_mbscat
strcmp, , wcscmp_mbscmp
strcoll 함수
strcpy, , wcscpy_mbscpy
strrchr, wcsrchr, _mbsrchr_mbsrchr_l
_strset, _strset_l, _wcsset, _wcsset_l, _mbsset_mbsset_l
strspn, wcsspn, _mbsspn_mbsspn_l